我有一个1乘4的单元格数组(1行4列(。该单元阵列的每一列都包含一个4乘4的矩阵。我只想复制每个4乘4矩阵第4列的第一行、第二行和第三行,并创建另一个3乘1的1乘4单元阵列(复制了3行1列元素(。我想知道做这件事的有效方法是什么?
for i=1:1:number_links
for j=1:1:3
O{1,i}(j,4)=T{1,i}(j,4);
end
end
邦华给出了一个很好的解决方案。但是使用cellfun
可以隐藏循环。我不确定它是否真的比普通的旧循环更干净,但很高兴知道它的可能性:
O = cellfun(@(x)x(1:3,4),T,'UniformOutput',false);
这里我们使用一个匿名函数@(x)x(1:3,4)
,它被应用于每个元素T{1,i}
。也就是O{1,i} = T{1,i}(1:3,4)
,就像邦华的回答一样。
我不确定您的代码。下面是一个例子。我创建了一个名为c
的1乘4单元阵列。每个单元是rand(4)
(随机数的4乘4矩阵(。我的方法是使用for
循环,并通过c{1,i} = c{1,i}(1:3,4)
更改每个单元格。这里c{1,i}(1:3,4)
给出第4列的第1行、第2行和第3行。
% create 1 by 4 cell array. Each cell is a 4 by 4 matrix
c = cell(1,4);
for i = 1:4
c{1,i} = rand(4);
end
disp(c)
% change 1 by 4 cell array. Each cell is a 3 by 1 matrix
for i = 1:4
c{1,i} = c{1,i}(1:3,4);
end
disp(c)
输出:
[4x4 double] [4x4 double] [4x4 double] [4x4 double]
[3x1 double] [3x1 double] [3x1 double] [3x1 double]