在 Python 2.7 中使用 numpy 或通过任何方式,如果我有一个任意大小的数组并想排除某些值并输出新数组,我该怎么做?这是我想要的
[(1,2,3),
(4,5,6), then exclude [4,2,9] to make the array[(1,5,3),
(7,8,9)] (7,8,6)]
我总是会排除与行长度相同长度的数据,并且每列总是只有一个条目。 [(1,5,3)] 是我想排除的另一个数据示例。所以每次我循环函数时,它都会将数组行大小减少一个。我想我必须使用掩码数组或将我的掩码转换为掩码数组并减去两者然后可能压缩输出但我不知道如何。谢谢你的时间。
最佳答案
如果将二维数组转换为展开的一维数组,则可以非常高效地完成此操作。然后您重复包含要排除的元素的数组,称为 e
以进行逐元素比较:
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
e = [1, 5, 3]
ar = a.T.ravel()
er = np.repeat(e, a.shape[0])
ans = ar[er != ar].reshape(a.shape[1], a.shape[0]-1).T
但如果 e
中的每个元素只匹配 a
的一行,它就可以工作。
编辑:
正如@Jaime 所建议的,您可以避免 ravel()
并直接获得相同的结果:
ans = a.T[(a != e).T].reshape(a.shape[1], a.shape[0]-1).T
关于python - 从每列中排除一个值的较小尺寸的新数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18893731/