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])]
我该如何解决这种情况?
答案 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]])