以下是一个示例代码,用于比较两个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数组。