逐行将函数应用于向量

use*_*870 1 matlab loops function vector

我正在尝试将一个函数应用于向量,其中对于每个新行,相同的函数适用但变量更改.例如,如果我有一个带N行的向量:

A = [1.2; 1.5; 1.8; 2.3; 2.7; 2.8; 2.9];
Run Code Online (Sandbox Code Playgroud)

我想n*0.1从每一行中减去n = row number.因此1.5,在行2中将减去0.2 (2*0.1),2.8在行6中将减去0.6 (0.1*6),依此类推.

为了澄清,我想这对我的档案上写着一个函数,确定这是行n,我想减去行的数量nn乘以0.1.我希望代码能够逐行读取文件,因此最终结果是向每行完成上述操作的向量.我想需要一个循环?

我确信解决方案很简单,但我不知道该怎么做.

Ste*_*fin 5

我相信这应该可以解决问题:

A
    1.2000
    1.5000
    1.8000
    2.3000
    2.7000
    2.8000
    2.9000

b = A-(1:numel(A)).'*0.1
b =
    1.1000
    1.3000
    1.5000
    1.9000
    2.2000
    2.2000
    2.2000
Run Code Online (Sandbox Code Playgroud)

它所做的是它创建了值的列向量1:numel(A),因此[1; 2; 3 ...],然后乘以每个值0.1.然后从原始矢量中减去该矢量.

如你所见,那里有一个圆点.'.这里没有必要,但包含它是一个好习惯.如果没有点,'则会进行共轭转置,而不是常规转置.当然,转置将水平向量转换为垂直向量.

为了满足Divakar,他只能使用以下方式同时制作晚餐并建造房屋bsxfun, permute and reshape:

如果你想用矩阵来做这件事,你可以使用repmat,或者meshgrid,或者更令人敬畏bsxfun,如下所示:

A = magic(5);

b = bsxfun(@minus, A, [1:size(A,1)].'*0.1)
b =
   16.9000   23.9000    0.9000    7.9000   14.9000
   22.8000    4.8000    6.8000   13.8000   15.8000
    3.7000    5.7000   12.7000   19.7000   21.7000
    9.6000   11.6000   18.6000   20.6000    2.6000
   10.5000   17.5000   24.5000    1.5000    8.5000
Run Code Online (Sandbox Code Playgroud)

更多尺寸?结合bsxfunpermute.

  • haha关于晚餐和房子的可爱评论,有一天可能是豪宅;) (2认同)
  • 由于'bsxfun`评论而被提升! (2认同)