问题描述
如何有效地获取多个索引数组中 [row,column]
的联合组合?
例如
A1 = np.array([[0,400],[0,0],[200,0]])
A2 = np.array([[0,[188,155],[22,0]])
a1 = A1.nonzero()
a2 = A2.nonzero()
a1
是 A1
的索引:[0,1],[2,0]
。 a2
是 A2
:[1,[1,0]
的索引。
给定这两个数组,唯一索引是:
[0,0]
或
(np.array([0,1,2],np.array([1,0]])
解决方法
这应该可以:
a1 = (np.array([0,2]),np.array([1,0]))
a2 = (np.array([1,1,np.array([0,0]))
np.unique(np.vstack((np.stack(a1).T,np.stack(a2).T)),axis=0) # axis=1 could be used instead of .T
输出:
array([[0,1],[1,0],[2,0]])
,
你可以试试:
a1 = (np.array([0,0]))
a1z = set(zip(*a1))
a2z = set(zip(*a2))
res = a1z.union(a2z)
print(res)
输出:
{(0,1),(2,0),(1,1)}
,
如果我理解你的问题,我会这样做: 1.在实际的二维数组中转换行和列的索引数组。
a1 = np.concatenate((a1[0].reshape(-1,a1[1].reshape(-1,1)),axis=1)
a2 = np.concatenate((a2[0].reshape(-1,a2[1].reshape(-1,axis=1)
在您的情况下,输出如下:
>>> a1
array([[0,0]])
>>> a2
array([[1,0]])
2.将结果数组连接在一起。
a = np.concatenate((a1,a2))
>>> a
array([[0,0]])
3.查找唯一行。
np.unique(a,axis=0)
array([[0,0]])