将矩阵列与从最后一列开始的递减元素相乘

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

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

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

因此,如果我们从数字1开始并用于步骤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]

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

sunsunfuqi 回答:将矩阵列与从最后一列开始的递减元素相乘

您要描述的内容可以通过在Matlab R2016b及更高版本中使用broadcasted逐元素乘法来实现。

假设您的输入是矩阵A,起始值start,步长step和数字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);

或使用Tony's trick

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

我刚刚找到了解决方法:

str
本文链接:https://www.f2er.com/3162954.html

大家都在问