python – 检查2个数组数组的相等数组的数量
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 检查2个数组数组的相等数组的数量,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1438字,纯文字阅读大概需要3分钟。
内容图文
![python – 检查2个数组数组的相等数组的数量](/upload/InfoBanner/zyjiaocheng/789/eb409a99e4144681bd81448416cb7807.jpg)
我想检查numpy数组中有多少个numpy数组元素是不同的.
解决方案不应包含列表理解.
沿着这些方向的东西(注意a和b在最后一个数组中有所不同):
a = np.array( [[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,5,5]] )
b = np.array( [[1,1,1],[2,2,2],[3,3,3],[4,4,4],[5,0,0]] )
y = diff_count( a,b )
print y
>> 1
解决方法:
方法#1
对不相等进行逐元素比较,然后沿最后一轴进行任意减少,最后计算 –
(a!=b).any(-1).sum()
方法#2
使用np.count_nonzero计算布尔值的速度可能更快 –
np.count_nonzero((a!=b).any(-1))
方法#3
观点要快得多 –
# https://stackoverflow.com/a/45313353/ @Divakar
def view1D(a, b): # a, b are arrays
a = np.ascontiguousarray(a)
b = np.ascontiguousarray(b)
void_dt = np.dtype((np.void, a.dtype.itemsize * a.shape[1]))
return a.view(void_dt).ravel(), b.view(void_dt).ravel()
a1D,b1D = view1D(a,b)
out = np.count_nonzero(a1D!=b1D)
标杆
In [32]: np.random.seed(0)
...: m,n = 10000,100
...: a = np.random.randint(0,9,(m,n))
...: b = a.copy()
...:
...: # Let's set 10% of rows as different ones
...: b[np.random.choice(len(a), len(a)//10, replace=0)] = 0
In [33]: %timeit (a!=b).any(-1).sum() # app#1 from this soln
...: %timeit np.count_nonzero((a!=b).any(-1)) # app#2
...: %timeit np.any(a - b, axis=1).sum() # @Graipher's soln
1000 loops, best of 3: 1.14 ms per loop
1000 loops, best of 3: 1.08 ms per loop
100 loops, best of 3: 2.33 ms per loop
In [34]: %%timeit # app#3
...: a1D,b1D = view1D(a,b)
...: out = np.count_nonzero((a1D!=b1D).any(-1))
1000 loops, best of 3: 797 μs per loop
内容总结
以上是互联网集市为您收集整理的python – 检查2个数组数组的相等数组的数量全部内容,希望文章能够帮你解决python – 检查2个数组数组的相等数组的数量所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。