Python 高效地在numpy数组空间中查找值

Python 高效地在numpy数组空间中查找值,python,numpy,Python,Numpy,我正在尝试创建仅包含某些值的numpy数组的副本。这是我使用的代码: A = np.array([[1,2,3],[4,5,6],[7,8,9]]) query_val = 5 B = (A == query_val) * np.array(query_val, dtype=np.uint16) 。。。这正是我想要的 现在,我希望query_val不仅仅是一个值。这里的答案是:建议使用逻辑and运算,但这是非常低空间效率的,因为您多次使用==来创建多个中间结果 就我而言,这意味着我没有足够的内

我正在尝试创建仅包含某些值的numpy数组的副本。这是我使用的代码:

A = np.array([[1,2,3],[4,5,6],[7,8,9]])
query_val = 5
B = (A == query_val) * np.array(query_val, dtype=np.uint16)
。。。这正是我想要的

现在,我希望query_val不仅仅是一个值。这里的答案是:建议使用逻辑and运算,但这是非常低空间效率的,因为您多次使用==来创建多个中间结果

就我而言,这意味着我没有足够的内存来做这件事。有没有一种方法可以在本机numpy中以最小的空间开销正确地实现这一点?

这里有一种方法使用-

样本运行-

In [356]: a
Out[356]: 
array([[5, 1, 4],
       [4, 5, 6],
       [2, 4, 9]])

In [357]: b
Out[357]: array([2, 4, 5])

In [358]: mask_in(a,b)
Out[358]: 
array([[5, 0, 4],
       [4, 5, 0],
       [2, 4, 0]])
这里有一种方法是使用-

样本运行-

In [356]: a
Out[356]: 
array([[5, 1, 4],
       [4, 5, 6],
       [2, 4, 9]])

In [357]: b
Out[357]: array([2, 4, 5])

In [358]: mask_in(a,b)
Out[358]: 
array([[5, 0, 4],
       [4, 5, 0],
       [2, 4, 0]])

A
中是否有重复项?是的,会有重复项。
A
中是否有重复项?是的,会有重复项。谢谢。不过,如果我看得对的话,这需要分配很多倍于全尺寸数组的空间(1.a,2.idx,3.idx==b.size,4.b[idx],5.b[idx]==a,6.np.where(…),而我的代码需要两次全尺寸分配。@fns我们可以用掩码
b[idx]轻松地将结果写回输入数组==a
如果您不想将副本作为输出。那么,您要拷贝还是回写?@fns除此之外,我们还有
idx
b[idx]
的内存占用。由于在
a
中存在重复项,因此不会有一个简单的解决方案。如果记忆对你来说是至关重要的,我认为你应该坚持一个循环的解决方案。谢谢。不过,如果我看得对的话,这需要分配很多倍于全尺寸数组的空间(1.a,2.idx,3.idx==b.size,4.b[idx],5.b[idx]==a,6.np.where(…),而我的代码需要两次全尺寸分配。@fns我们可以用掩码
b[idx]轻松地将结果写回输入数组==a
如果您不想将副本作为输出。那么,您要拷贝还是回写?@fns除此之外,我们还有
idx
b[idx]
的内存占用。由于在
a
中存在重复项,因此不会有一个简单的解决方案。如果记忆对你来说是至关重要的,我认为你应该坚持一个循环的解决方案。