【问题标题】:Complicated calculations between matrices in MATLABMATLAB中矩阵之间的复杂计算
【发布时间】:2018-04-22 13:10:50
【问题描述】:

我有两个数据集,比如说 data1 和 data2。 data1 是一个 20x12 矩阵,data2 是一个 12x6 矩阵。我想创建一个新的矩阵 X,它将包含以下内容:

第一个单元格将是第一行 data1 与第一列 data2 的元素乘法的汇总。第二行的第一个元素将是第二行 data1 与第一列 data2 的元素乘法的汇总。 ...第 20 行的第一个元素将是第 20 行 data1 与第 1 列 data2 的元素相乘的汇总。

以类似的方式,它必须是其余列。例如,第一行的第二个单元格将是第一行 data1 与第二列 data2 的元素相乘的汇总,等等。 我尝试了以下方法,但我不熟悉 Matlab 中的编程,一般不熟悉数学,

data1 = xlsread(...); % i insert the datasets
data2 = xlsread(...);

for i=1:20
    for j=1:6
data3 = sum(data1(i,:).*data2(:,j));
    end
end

但它不起作用,有人可以帮我弄清楚怎么做或给我一个链接吗? 提前致谢!

【问题讨论】:

    标签: matlab matrix matlab-figure matrix-multiplication


    【解决方案1】:

    您的代码有问题

    您的代码存在 3 个问题:

    1. 大小不匹配: data1(i,:) 的大小为 1x12,而 data2(:,j) 的大小为 12x1。为了将它们相乘,您需要使用其中之一的转置。

    2. 分配不当:每次迭代都会覆盖 data3,您应该使用 i,j 索引来执行正确的分配。

    3. 初始化:最好的用法是在运行 for 循环之前初始化 data3。

    处理这些问题

    下面的代码处理了上面提到的所有问题:

    data3 = zeros(20,6);
    for i=1:20
        for j=1:6
            data3(i,j) = sum(data1(i,:)'.*data2(:,j));
        end
    end
    

    更好的解决方案

    您实际上可以通过常规矩阵乘法获得相同的结果。这可以按如下方式完成:

    data3 = data1*data2;
    

    【讨论】:

      【解决方案2】:

      你正在寻找矩阵乘法:

      data3 = data1 * data2;
      

      这是线性代数中的基本运算,因此在 MATLAB 中很容易计算。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-19
        • 1970-01-01
        相关资源
        最近更新 更多