MATLAB 中矩阵之间的复杂计算

Complicated calculations between matrices in MATLAB

我有两个数据集,假设是 data1 和 data2。 data1 是一个 20x12 矩阵,data2 是一个 12x6 矩阵。我想创建一个新矩阵 X,其中包含以下内容:

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

以类似的方式它必须是其余列。例如,第一行的第二个单元格将是第一行 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

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

您的代码有问题

您的代码存在 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;

您正在寻找矩阵乘法:

data3 = data1 * data2;

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