【问题标题】:Multiplication of cell elements with a vector in matlab在matlab中将单元元素与向量相乘
【发布时间】:2017-01-18 21:27:55
【问题描述】:

如果我有一个包含 2 个矩阵的单元格:

A = {[10  0  0 10  0 20 15;
       0 10 10 15  0  0 20;
      10  0  0 12 11  0  0;
      10  0  0  0 19  0 14;
      18 13  0  0  0 15  0;
       0 10  0  0  0 10 15] 
     [ 0  0 10  0 20 15;
      10 10 15  0  0 20;
       0  0 12 11  0  0;
       0  0  0 19  0 14;
      13  0  0  0 15  0;
      11  0 13  0 15  0]}

B = [500 550 600 650 700 550]

我想将每个矩阵与该向量相乘,即 A 的第一行乘以 B 的第一个元素,A 的第二行乘以 B 的第二个元素,...,以及 A 的第 6 行B的第6个元素。既然 A 是一个单元格,如何定义它?

【问题讨论】:

    标签: matlab cell


    【解决方案1】:

    您可以使用cellfun 分别对A 中的每个元素进行操作,并使用bsxfunA 中的矩阵中的每一行乘以B 中的一个元素:

    celltimes = @(A) bsxfun(@times,A,B.');
    C = cellfun(celltimes,A,'UniformOutput',false)
    

    结果:

    >> celldisp(C)
    C{1} =
      Columns 1 through 4
            5000           0           0        5000
               0        5500        5500        8250
            6000           0           0        7200
            6500           0           0           0
           12600        9100           0           0
               0        5500           0           0
      Columns 5 through 7
               0       10000        7500
               0           0       11000
            6600           0           0
           12350           0        9100
               0       10500           0
               0        5500        8250
    C{2} =
      Columns 1 through 4
               0           0        5000           0
            5500        5500        8250           0
               0           0        7200        6600
               0           0           0       12350
            9100           0           0           0
            6050           0        7150           0
      Columns 5 through 6
           10000        7500
               0       11000
               0           0
               0        9100
           10500           0
            8250           0
    

    正如@Adriaan 在 cmets 中指出的那样,在 Matlab 2016b 中 bsxfun 是隐式实现的,所以你可以写:

    C = cellfun(@(A) A.*B.',A,'UniformOutput',false);
    

    【讨论】:

    • 请注意,在 R2016b 中,MATLAB 已实现隐式扩展,不再需要使用 bsxfun。可能还想将其添加为 R2016b 后的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多