获取跨数组的联合组合 - python

问题描述

如何有效地获取多个索引数组中 [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()

a1A1 的索引:[0,1],[2,0]a2A2:[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]])