我想知道如何在列的其余部分添加或减去数据的第一个值,以便第一行数据为0。
例如,这个:
A = [13.2 12.4 -11.7 6.3 -4.0
14.2 13.1 -9.2 8.2 -4.1
14.4 14.5 -7.6 10.0 -5.1];
会改为:
0 0 0 0 0
1 0.7 2.5 1.9 0.1
1.2 2.1 4.1 3.7 1.1
我想我可以通过使用sign()检查第一个数字是正数还是负数,并选择是使用ifelse语句添加还是减去它,但我不确定如何将它单独应用于每个列(或者如果这个是最好的方式!)。
非常感谢提前。
答案 0 :(得分:3)
您实际上需要逐个元素操作,因为bsxfun
状态的定义。在你的情况下应该是:
A = [13.2 12.4 -11.7 6.3 -4.0
14.2 13.1 -9.2 8.2 -4.1
14.4 14.5 -7.6 10.0 -5.1];
B=bsxfun(@minus,A,A(1,:))
B =
0 0 0 0 0
1.0000 0.7000 2.5000 1.9000 -0.1000
1.2000 2.1000 4.1000 3.7000 -1.1000
这是您的问题描述的结果,但是对于您添加的示例,我假设您需要绝对值,因此您需要添加abs
:
B=abs(bsxfun(@minus,A,A(1,:)))
B =
0 0 0 0 0
1.0000 0.7000 2.5000 1.9000 0.1000
1.2000 2.1000 4.1000 3.7000 1.1000
答案 1 :(得分:2)
您可以选择第一行并从矩阵中减去它。
A = A - A(1, :)
或者对于旧版本的Matlab:
A = A - repmat(A(1, :), size(A, 1), 1)