Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将矩阵列与从最后一列开始的递减元素相乘_Matlab_Matrix - Fatal编程技术网

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), :)