如何在二维数组的列表推理中有多个条件

时间:2018-03-13 03:44:01

标签: python list numpy vector list-comprehension

A = [3,4]

Y是多个值的数组,如

Y = [2,3,2,2,2,2,2,3,3,3,3,3]
X =
 [[ 1.  1.  1. ...,  0.  0.  0.]
 [ 0.  1.  0. ...,  0.  0.  0.]
 [ 0.  1.  1. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  1. ...,  0.  0.  0.]]

然后我想选择所有那些X的向量,其中相应的X [Y]在A中。所以我写了下面的代码:

 Xij = [X[Y == j] for j in set(a)]
 print(Xij)
 print(shape(Xij))

输出:

 (3, 1, 1)
    [array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  1.,  0., ...,  0.,  0.,  0.],
           ..., 
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  1.,  0., ...,  0.,  0.,  0.]]), array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           ..., 
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.]]), array([[ 0.,  1.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 1.,  1.,  0., ...,  0.,  0.,  0.],
           ..., 
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  0.,  0., ...,  0.,  0.,  0.],
           [ 0.,  1.,  0., ...,  0.,  0.,  0.]])]

但是这将导致一个2D数组列表。另一方面,我想要一个普通的2D阵列。 我甚至尝试过追加功能,但似乎也没有用

Xi = []
for j in A:
    m = [X[Y == j]]
    Xi.append([m])

期望的输出: 而不是3d数组我得到了我想要一个普通的2d数组附加在一起。

关于如何使这项工作的任何建议?

1 个答案:

答案 0 :(得分:0)

谢谢我让它工作,有一个功能np.isin完成这项工作

Xij = X[np.isin(Y,A)]

输出:

[[ 0.  1.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  0.  0. ...,  0.  0.  0.]
 ..., 
 [ 0.  0.  0. ...,  0.  0.  0.]
 [ 0.  1.  0. ...,  0.  0.  0.]
 [ 0.  1.  0. ...,  0.  0.  0.]]

由于