以下是一个示例代码,用于比较两个2D numpy数组并删除行:
import numpy as np
# 创建两个2D数组
arr1 = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
arr2 = np.array([[4, 5, 6],
[10, 11, 12]])
# 比较两个数组的每一行
comparison = arr1[:, np.newaxis, :] == arr2
# 检查每一行是否完全相等
rows_to_delete = np.all(np.any(comparison, axis=2), axis=1)
# 删除相等的行
arr1 = arr1[~rows_to_delete]
print(arr1)
输出结果:
[[1 2 3]
[7 8 9]]
在这个示例中,我们首先创建了两个2D数组arr1
和arr2
。然后,我们使用np.newaxis
将arr1
的维度扩展为(3, 1, 3)
,使其与arr2
的维度(2, 3)
兼容。然后,我们对两个数组进行逐元素比较,得到一个布尔类型的数组comparison
,其中comparison[i, j]
表示arr1
的第i
行和arr2
的第j
行是否完全相等。
接下来,我们使用np.any(comparison, axis=2)
检查每一行是否有相等的元素,得到一个布尔类型的数组。然后,我们使用np.all()
函数检查每一行是否完全相等,并得到一个布尔类型的数组rows_to_delete
,其中rows_to_delete[i]
表示arr1
的第i
行是否需要删除。
最后,我们使用布尔索引~rows_to_delete
来删除arr1
中需要删除的行,并将结果保存在arr1
中。最后,我们打印输出了删除行后的arr1
数组。