0

假设我有一个4x1单元格数组,A每个单元格内部都是一个2x5矩阵,

A={[1 1 1 1 1; 2 2 2 2 2];
   [3 3 3 3 3; 4 4 4 4 4];
   [5 5 5 5 5; 6 6 6 6 6];
   [7 7 7 7 7; 8 8 8 8 8]}

我想要的是为每个单元格添加一个常数,比如说100,到4th矩阵的列中B。例如

B={[ 1 1 1 101 1; 2 2 2 102 2];
   [3 3 3 103 3; 4 4 4 104 4];
   [5 5 5 105 5; 6 6 6 106 6];
   [7 7 7 107 7; 8 8 8 108 8]}

最好的方法是什么?

我可以通过使用得到加法结果

B=cellfun(@(x) x(:,4)+100,A,'uni',0) 

但很难得到 B。非常感谢任何帮助。

4

2 回答 2

3

如果您可以保证单元格中的矩阵A具有相同的维度(在您的情况下为 2x5 矩阵),则可以垂直连接所有矩阵:

B = cat(1, A{:});

然后将 100 添加到第四列:

B(:, 4) = B(:, 4) + 100;

然后将其转换回元胞数组:

B = mat2cell(B, size(A{1}, 1) * ones(size(A)), size(A{1}, 2));

在这种情况下,考虑将数据表示为三维矩阵而不是元胞数组。操作起来会容易得多。

在一般情况下,您将使用一个for循环:

B = A;
for k = 1:numel(A)
    B{k}(:, 4) = B{k}(:, 4) + 100;
end
于 2013-03-09T22:17:09.557 回答
1

您可以为每个单元格添加一个矩阵,如下所示:

B=cellfun(@(x) x+[0 0 0 100 0;0 0 0 100 0],A,'UniformOutput',false); 
于 2013-03-09T22:19:27.423 回答