Matlab 将函数逐行应用于向量
我试图将一个函数应用于向量,其中对于每一新行,应用相同的函数,但变量会发生变化。例如,如果我有一个带有Matlab 将函数逐行应用于向量,matlab,function,loops,vector,Matlab,Function,Loops,Vector,我试图将一个函数应用于向量,其中对于每一新行,应用相同的函数,但变量会发生变化。例如,如果我有一个带有N行的向量: A = [1.2; 1.5; 1.8; 2.3; 2.7; 2.8; 2.9]; 我想从n=行号的每一行减去n*0.1。因此,第2行中的1.5将被0.2(2*0.1)减去,第6行中的2.8将被0.6(0.1*6)减去,依此类推 为了澄清,我想要一个函数对我的文件说,这是行n,我想用n减去行n乘以0.1。我希望代码能够逐行读取文件,因此最终结果是一个向量,它对每一行执行了上述操作。
N
行的向量:
A = [1.2; 1.5; 1.8; 2.3; 2.7; 2.8; 2.9];
我想从n=行号的每一行减去n*0.1
。因此,第2行中的1.5
将被0.2(2*0.1)
减去,第6行中的2.8
将被0.6(0.1*6)
减去,依此类推
为了澄清,我想要一个函数对我的文件说,这是行n
,我想用n
减去行n
乘以0.1
。我希望代码能够逐行读取文件,因此最终结果是一个向量,它对每一行执行了上述操作。我认为需要一个循环
我确信这个解决方案很简单,但我不知道怎么做。我相信这应该可以解决问题:
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
。然后从原始向量中减去该向量
如您所见,这里有一个点,“
。在这里,这并不是真的必要,但将其包括在内是一个很好的实践。如果没有点,”
将生成a,而不是a。当然,转置将水平向量转换为垂直向量
为了满足需求,谁可以只使用bsxfun、permute和reforme同时做饭和盖房子呢
如果你想用矩阵来做这件事,你可以使用,或者,或者更棒的,像这样:
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
和 我认为这应该可以做到:
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
。然后从原始向量中减去该向量
如您所见,这里有一个点,“
。在这里,这并不是真的必要,但将其包括在内是一个很好的实践。如果没有点,”
将生成a,而不是a。当然,转置将水平向量转换为垂直向量
为了满足需求,谁可以只使用bsxfun、permute和reforme同时做饭和盖房子呢
如果你想用矩阵来做这件事,你可以使用,或者,或者更棒的,像这样:
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
和 和bsxfun
,以获得适当的矩阵大小写,尽管没有询问!哈哈,关于晚餐和房子的美好评论,也许有一天会是豪宅;)和bsxfun
,以获得适当的矩阵大小写,尽管没有询问!哈哈,关于晚餐和房子的美好评论,也许有一天会是豪宅;)