【问题标题】:Result matrix where each entry is a vector of varying size in Matlab结果矩阵,其中每个条目是 Matlab 中不同大小的向量
【发布时间】:2014-05-01 04:46:49
【问题描述】:

我有一个 128 X 8192 矩阵。我已将其拆分为每个大小为 1X64 的单元格数组:

C = mat2cell(input_matrix, repmat(1,[1 128]), repmat(64,[1 128]));

现在我需要将每个单元格数组传递给一个函数,比如“fn_X”。此函数返回一个不同大小的数组。我需要将每个传递的单元格数组的输出存储在结果矩阵中。我使用了以下代码:

for(irl = 1 : 128)
        for(jrl = 1 : 128)
            Output_matrix(irl,jrl) = fn_X(C{irl,jrl});
         end
end

这给了我一个错误“下标分配维度不匹配”。

然后我使用以下代码在列矩阵中进行了尝试:

king = 1;
    for(irl = 1 : 128)
        for(jrl = 1 : 128)
            Output_matrix(king) = fn_X(C{irl,jrl});
            king = king + 1;
        end
    end

这给了我一个错误“在赋值 A(I) = B 中,B 和 I 中的元素数量必须相同。”

我还尝试使用以下代码使用元胞数组赋值:

king = 1;
for(irl = 1 : 128)
    for(jrl = 1 : 128)
        Output_matrix(king) = fn_X(C{irl,jrl});
        king = king + 1;
    end
end

这给出了错误“单元格内容分配给非单元格数组对象。”

关于如何处理这个问题有什么建议吗?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您的代码的问题是应该在赋值左侧使用大括号:

    king = 1;
    for irl = 1 : 128
        for jrl = 1 : 128
            Output_matrix{king} = fn_X(C{irl,jrl});
            king = king + 1;
        end
    end
    

    但这可能不是正确的方法。这不是语言的“风格”,有意义的方式是矢量化,这可能需要fn_X 自己处理。

    或者,您也可以使用更简单(通常更快)的方式来完成:

    Output_matrix = cellfun (@fn_X, C, "UniformOutput", false);
    

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-03-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      相关资源
      最近更新 更多