首页 > 解决方案 > 将矩阵列与从最后一列开始的递减元素相乘

问题描述

我有一个具有以下形状的矩阵:

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

现在我想从最后一列开始,将该列乘以一个数字,然后减少数字并移动到下一列。

因此,如果我们从数字 1 开始并使用 for step 0.2 修改所有列:

Anew = [1*0.6 2*0.8 3*1;
        4*0.6 5*0.8 6*1;
        7*0.6 8*0.8 9*1]

或者对于第二个示例,我们从 0.9 开始,以 0.1 作为步骤并修改 3 列:

B = [1  2  3  4;
     5  6  7  8;
     9  10 11 12;
     13 14 15 16]

并得到:

Bnew = [1   2*0.7  3*0.8   4*0.9;
        5   6*0.7  7*0.8   8*0.9;
        9   10*0.7 11*0.8 12*0.9;
        13  14*0.7 15*0.8 16*0.9]

矩阵的列数可能会有所不同,我想设置起始编号、结束编号、步骤编号和要修改的列数。

标签: matlabmatrix

解决方案


您所描述的可以通过matlab R2016b 及更高版本中的广播元素乘法来实现。

假设您的输入是 matrix A、 start value start、 step sizestep和 number n。您可以从构建要乘以的因子开始。我将假设,当n > size(A, 2)您只想使用n第一步而不是出错时:

k = size(A, 2);
n = min(n, k);
factors = ones(1, k);
factors(1 + k - n:end) = linspace(start - (n - 1) * step, start, n);

现在您可以将矩阵相乘:

result = A .* factors;

该解决方案具有极其简单且完全矢量化的优点。

如果您有旧版本的 MATLAB,请改为执行以下操作:

result = A .* repmat(factors, size(A, 1), 1);

或者使用托尼的把戏

result = A .* factors(ones(3, 1), :)

推荐阅读