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

时间:2018-10-30 02:57:06

标签: arrays matlab

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

2 个答案:

答案 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]