如何从单元格数组中复制列以创建另一个单元格数组



我有一个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]

相关内容

  • 没有找到相关文章

最新更新