栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

测试Numpy数组是否包含给定的行

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

测试Numpy数组是否包含给定的行

__contains__
在编写本文时,
(a ==b).any()

Numpys可以说是正确的,除非它
b
是一个标量(它有点毛,但我相信–仅在1.7或更高版本中如此工作–这将是正确的常规方法
(a ==b).all(np.arange(a.ndim - b.ndim, a.ndim)).any()
,这使得的所有组合
a
b
维度的意义)…

编辑:只是要清楚,这是 不是
一定预期的结果,当广播参与。还有人可能会争辩说,它应该

a
np.in1d
这样分开处理这些项目。我不确定是否应该有一种明确的方法。

现在,您希望numpy在找到第一个匹配项时停止。该AFAIK目前不存在。这很困难,因为numpy主要基于ufunc,它们在整个数组上执行相同的操作。Numpy确实优化了这种减少,但是只有在要减少的数组已经是布尔数组(即

np.ones(10,dtype=bool).any()
)时才有效。

否则,它将需要一个

__contains__
不存在的特殊功能。这似乎很奇怪,但是您必须记住numpy支持许多数据类型,并且具有更大的机制来选择正确的数据类型并选择正确的函数来对其进行处理。因此,换句话说,ufunc机制无法做到这一点,并且
__contains__
由于数据类型的原因,实现这样的操作实际上并不是那么简单。

您当然可以用python编写它,或者因为您可能知道数据类型,所以用Cython / C编写它非常简单。


那就是。无论如何,对这些事情使用基于排序的方法通常要好得多。这有点乏味,并且没有

searchsorted
for那样的东西
lexsort
,但是它可以工作(
scipy.spatial.cKDTree
如果您愿意,也可以滥用)。假设您只想沿最后一个轴进行比较:

# Unfortunatly you need to use structured arrays:sorted = np.ascontiguousarray(a).view([('', a.dtype)] * a.shape[-1]).ravel()# Actually at this point, you can also use np.in1d, if you already have many b# then that is even better.sorted.sort()b_comp = np.ascontiguousarray(b).view(sorted.dtype)ind = sorted.searchsorted(b_comp)result = sorted[ind] == b_comp

这也适用于数组

b
,并且如果保留排序后的数组,则一次保持单个值(行)
b
,并且
a
保持不变(如果我将
np.in1d
其视为一个数组,那么一次)也将更好。重新排列)。
重要提示:
np.ascontiguousarray
为了安全起见,您必须这样做。它通常什么也不做,但是如果这样做,否则将是一个很大的潜在错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号