逐行将函数应用于向量

时间:2015-09-24 12:14:41

标签: matlab function loops vector

我试图将一个函数应用于向量,其中对于每个新行,相同的函数适用但变量发生变化。例如,如果我有一个N行的向量:

A = [1.2; 1.5; 1.8; 2.3; 2.7; 2.8; 2.9];

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

为了澄清我想要一个对我的文件说的功能,好的这就是行n我希望将行n中的数字减去n乘以{{1 }}。我希望代码能够逐行读取文件,因此最终结果是向每行完成上述操作的向量。我认为需要一个循环?

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

1 个答案:

答案 0 :(得分: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

它的作用是创建一个值1:numel(A)的列向量,所以[1; 2; 3 ...],然后将这些值中的每一个乘以0.1。然后从原始矢量中减去该矢量。

如您所见,那里有一个点.'。这里没有必要,但包含它是一种很好的做法。如果没有点,'会生成conjugate transpose,而不是regular one。转置当然会将水平向量转换为垂直向量。

要满足Divakar,谁可以只使用bsxfun, permute and reshape同时做晚餐并建房:

如果你想用矩阵来做这件事,你可以使用repmatmeshgrid,或更强大的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

更多尺寸?结合bsxfunpermute