让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数组附加在一起。
关于如何使这项工作的任何建议?
答案 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.]]
由于