我试图将一个函数应用于向量,其中对于每个新行,相同的函数适用但变量发生变化。例如,如果我有一个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 }}。我希望代码能够逐行读取文件,因此最终结果是向每行完成上述操作的向量。我认为需要一个循环?
我确定解决方案很简单,但我不知道该怎么做。
答案 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
同时做晚餐并建房:
如果你想用矩阵来做这件事,你可以使用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
更多尺寸?结合bsxfun
和permute
。