我有一个1 x 4单元阵列(1行和4列)。该单元格阵列的每一列都包含一个4 x 4矩阵。我只想复制每4 x 4矩阵的第4列的第一行,第二行和第三行,并创建另一个1 x 4单元格数组,即3 x 1(已复制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
答案 0 :(得分:2)
Banghua gives a good solution。但是可以使用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)
,就像Banghua的答案一样。
答案 1 :(得分:1)
我不确定您的代码。这是一个例子。我创建了一个名为c
的1 x 4单元格数组。每个单元格均为rand(4)
(4×4随机数矩阵)。我的方法是使用for
循环并通过c{1,i} = c{1,i}(1:3,4)
更改每个单元格。这里的c{1,i}(1:3,4)
给出了第四列的第一行,第二行和第三行。
% 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]