Matlab 将矩阵列与从最后一列开始的递减元素相乘
我有一个矩阵,形状如下:Matlab 将矩阵列与从最后一列开始的递减元素相乘,matlab,matrix,Matlab,Matrix,我有一个矩阵,形状如下: 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;
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]
矩阵的列数可能会有所不同,我想设置开始数、结束数、步骤数和要修改的列数。我刚刚找到了解决方案:
count = 0;
A = randi([-10,10],4,4);
Anew = [];
for i=0.9:-0.1:0
number_columns = 3;
if count == number_columns
rest = existing_columns - count;
for i=rest:-1:1
Anew = [(A(:,i)) Anew];
end
break
end
existing_columns = size(A,1);
Anew = [(A(:,existing_columns-count)*i) Anew];
count = count + 1;
end
您所描述的内容可以通过MatlabR2016B及更高版本中的元素乘法实现 假设您的输入是矩阵
A
、起始值start
、步长step
、数字n
。您可以从构造要乘以的因子开始。我将假设当n>大小(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);
或使用:
您使用的是什么版本?另外,您的语法是Python,而不是MATLAB。请选择一个。很抱歉,我之前没有看到您的编辑+1非常好的简短解决方案。@Zed。谢谢是否可以使用下方的编辑按钮修复此问题?是否也可以进行修改以忽略n并保留那些未使用0元素修改的列?因为矩阵在代码中稍后会发生变化,如果n>维度,则会发生错误。抢手货我的意思是
min
,而不是max
。现在修好了。
result = A .* factors(ones(3, 1), :)