python - numpy 测试是否在另一个数组的行中的每个值
问题描述
我有两个相同形状的数组(2500、9)。我试图找出最有效的方法来测试一行中的每个值array1
是否在array2
. 考虑以下简化示例:
>>> array1 = np.array([[1, 2, 3], [4, 5, 6], [3, 8, 9]])
>>> array2 = np.array([[0, 2, 4], [3, 5, 6], [6, 8, 9]])
>>> comparison_func(array1, array2)
array([False, True, False],
[False, True, True],
[False, True, True])
我可以通过遍历 in 中的每个值array1
并测试该值是否在array2
.
>>> comp = []
>>> rows, columns = array1.shape
>>> np.array([array1[row, column] in array2[row, :]
for row in range(rows)
for column in range(columns)])
.reshape(array1.shape)
array([[False, True, False],
[False, True, True],
[False, True, True]])
我想知道在numpy中是否有更有效的方法来做到这一点。np.isin
我尝试了和的各种组合np.isin1d
,但无法将比较限制为从array1
到 中相应行的标量array2
。在此先感谢您的任何建议。
解决方案
Numpy 是==
平等的:
>>> array1 = np.array([[1, 2, 3], [4, 5, 6], [3, 8, 9]])
>>> array2 = np.array([[0, 2, 4], [3, 5, 6], [6, 8, 9]])
>>> print(array1 == array2)
[[False True False]
[False True True]
[False True True]]
>>>
Numpy 这样做的方式是他们将__eq__
函数更改为其他内容,即执行上述操作。
这是一个示例,说明如何在 python 类中实现这一点:
class array:
def __init__(self, lst):
self.lst = lst
def __eq__(self, other):
self.final = [[other[i][x] == y for x, y in enumerate(v)] for i, v in enumerate(self.lst)]
return self.final
print(array([[1, 2, 3], [4, 5, 6], [3, 8, 9]]) == [[0, 2, 4], [3, 5, 6], [6, 8, 9]])
输出:
[[False, True, False], [False, True, True], [False, True, True]]
推荐阅读
- machine-learning - RDF 存储上的机器学习以检测模式
- php - 在 JMS 序列化程序中混合访问器和 SkipWhenEmpty
- python - 如何使用 Python 从容器内的文本中刮取 Td
- openstreetmap - 有没有办法在 OSRM 服务器中使用从 openstreetmap 导出的地图图块?
- wordpress - WooCommerce REST API 通过电话号码获取客户
- c++ - 虚函数覆盖是否违反 LSP?
- c# - 如何在 Tfs 的 TeamProject 中创建 Git 存储库?
- flutter - 如何在 FutureBuilder 项目的 Flutter ListView 中向上滚动时修复“跳到每个项目的顶部”?
- ssl - Heroku 的解决方法不再支持 Cloudflare 后面的 SSL(“不支持 CDN 中的严格 TLS”)?
- ruby-on-rails - 从 ruby on rails 的超时错误中解救出来