Python 高效地在numpy数组空间中查找值
我正在尝试创建仅包含某些值的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运算,但这是非常低空间效率的,因为您多次使用==来创建多个中间结果 就我而言,这意味着我没有足够的内
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
中存在重复项,因此不会有一个简单的解决方案。如果记忆对你来说是至关重要的,我认为你应该坚持一个循环的解决方案。