python - 根据第二个数组过滤numpy数组中的行

标签 python numpy

我有 2 个 2d numpy 数组 A 和 B 我想删除 A 中出现在 B 中的所有行。

我试过这样的:

A[~np.isin(A, B)]

但是 isin 保留了 A 的维度,我需要每行一个 bool 值来过滤它。

编辑:像这样

A = np.array([[3, 0, 4],
              [3, 1, 1],
              [0, 5, 9]])
B = np.array([[1, 1, 1],
              [3, 1, 1]])

.....

A = np.array([[3, 0, 4],
              [0, 5, 9]])

最佳答案

可能不是最高效的解决方案,但可以满足您的需求。您可以将 AB 的 dtype 更改为由一行组成的单元。您需要首先确保数组是连续的,例如与 ascontiguousarray :

Av = np.ascontiguousarray(A).view(np.dtype([('', A.dtype, A.shape[1])])).ravel()
Bv = np.ascontiguousarray(B).view(Av.dtype).ravel()

现在可以申请np.isin直接:

>>> np.isin(Av, Bv)
array([False,  True, False])

根据文档,invert=True 比取反 isin 的输出更快,所以你可以这样做

A[np.isin(Av, Bv, invert=True)]

关于python - 根据第二个数组过滤numpy数组中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70789782/

相关文章:

python - 在 AWS SageMaker 中调用 Scikit Learn 模型的端点

python - Numpy 双切片赋值,整数索引后跟 bool 索引

python - 在 Bokeh 中的饼图楔形中添加标签

Python:如何从一行值创建一个完整的距离矩阵?

python - 如何找到数组中值的负虚部然后将其变为正值?

python - 在 Python 中将 multiprocessing.Array 转换为 ctypes.c_void_p

python - 有没有办法在 NumPy 中生成一个具有 Decimal 类型精度的复数?

python - 根据时间戳和不同位置创建 session

python - 超过 4 个 channel 的 Opencv 聚类

python - 在Docker上运行时,Airflow提供日志文件不存在错误