程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

在具有两个隐式循环的数组上进行迭代

发布于2019-12-31 03:28     阅读(1375)     评论(0)     点赞(27)     收藏(3)


是否可以对具有两个索引的数组进行隐式迭代?这是我想做的一个非常简单的例子:

import numpy as np

x = np.arange(3)
y = np.zeros(3)

for i in range(3):
    y[i] = np.sum(x - x[i])

有一个隐式循环(总和)和一个显式的循环(for i in range(3))...是否可能有一个完全隐式的版本?


解决方案


在可能的情况下,您应该始终在计算机科学之前尝试使用数学。您的表情y[i] = np.sum(x - x[i])可以用少许代数重写为y[i] = np.sum(x) - x.size * x[i]这非常清楚地表明,您可以重写代码而无需任何循环,如下所示:

y = np.sum(x) - x.size * x

显而易见,对于大型数组,它的运行速度比@JoshAdel的解决方案要快得多,对于大小为1000的输入,运行速度比x400快:

>>> x = np.random.normal(size=(1000,))
>>> np.allclose(np.sum(x - x[:,None], 1), np.sum(x) - x.size * x)
True

%timeit np.sum(x - x[:,None], 1)
100 loops, best of 3: 6.33 ms per loop

%timeit np.sum(x) - x.size * x
100000 loops, best of 3: 16.5 us per loop


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/193960/c5642c67364884126923/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

27 0
收藏该文
已收藏

评论内容:(最多支持255个字符)