如何解决如何使用索引和值迭代一维NumPy数组
有几种选择。下面假设您要迭代1d NumPy数组。
迭代 range
for j in range(theta.shape[0]): # or range(len(theta))
some_function(j, theta[j], theta)
请注意,这是可与一起使用的3种解决方案中的唯一一种numba
。这是值得注意的,因为在NumPy数组上进行显式迭代通常仅在与numba
预编译组合或其他方式结合时才有效。
迭代
for idx, j in enumerate(theta):
some_function(idx, j, theta)
3维解决方案中最有效的一维阵列。请参阅下面的基准测试。
迭代
for idx, j in np.ndenumerate(theta):
some_function(idx[0], j, theta)
请注意中的附加索引步骤idx[0]
。这是必要的,因为shape
1d
NumPy数组的索引(如)作为单例元组给出。对于一维数组,np.ndenumerate
效率不高;它的优势仅表现在多维数组上。
绩效基准
# Python 3.7, NumPy 1.14.3
np.random.seed(0)
arr = np.random.random(10**6)
def enumerater(arr):
for index, value in enumerate(arr):
index, value
pass
def ranger(arr):
for index in range(len(arr)):
index, arr[index]
pass
def ndenumerater(arr):
for index, value in np.ndenumerate(arr):
index[0], value
pass
%timeit enumerater(arr) # 131 ms
%timeit ranger(arr) # 171 ms
%timeit ndenumerater(arr) # 579 ms
解决方法
对于python dict
,我可以用来iteritems()
同时遍历键和值。但是我找不到NumPy数组的这种功能。我必须idx
像这样手动跟踪:
idx = 0
for j in theta:
some_function(idx,j,theta)
idx += 1
有一个更好的方法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。