在数组元素中执行减法运算后获取多个数组

时间:2018-04-04 09:46:23

标签: python python-3.x numpy

import numpy as np
m = []
k = []
a = np.array([[1,2,3,4,5,6],[50,51,52,40,20,30],[60,71,82,90,45,35]])
for i in range(len(a)):
    m.append(a[i, -1:])
    for j in range(len(a[i])-1):
        n = abs(m[i] - a[i,j])
        k.append(n)
    k.append(m[i])
print(k)

预期输出k:

[5,4,3,2,1,6],[20,21,22,10,10,30],[25,36,47,55,10,35]

这也是一个numpy数组。

但我得到的输出是

[array([5]), array([4]), array([3]), array([2]), array([1]), array([6]), array([20]), array([21]), array([22]), array([10]), array([10]), array([30]), array([25]), array([36]), array([47]), array([55]), array([10]), array([35])]

我该如何解决这种情况?

1 个答案:

答案 0 :(得分:2)

您想从自身中减去每个子数组的最后一列。你为什么不使用矢量化方法?您可以通过从其余项中减去最后一列,然后将column_stack与最后一列的未更改版本一起减去,一次完成所有减法。另请注意,您需要更改最后一列的尺寸,以便从2D数组中减去。为此,我们可以使用广播

In [71]: np.column_stack((abs(a[:, :-1] - a[:, None, -1]), a[:,-1]))
Out[71]: 
array([[ 5,  4,  3,  2,  1,  6],
       [20, 21, 22, 10, 10, 30],
       [25, 36, 47, 55, 10, 35]])