将列的第一个值加到或减去列的其余部分(MATLAB)

时间:2017-03-13 09:42:30

标签: arrays matlab matrix

我想知道如何在列的其余部分添加或减去数据的第一个值,以便第一行数据为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语句添加还是减去它,但我不确定如何将它单独应用于每个列(或者如果这个是最好的方式!)。

非常感谢提前。

2 个答案:

答案 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)