【发布时间】:2019-07-19 15:16:12
【问题描述】:
我有一个模拟,它在给定循环中任意多次查看 numpy 数组,以检查是否有任何元素超过了某个阈值。如果一个元素超过了阈值,我需要跟踪是哪个元素这样做了,所以我可以对那个特定的元素进行操作。我有一个功能可以做到这一点,但它是我的代码的主要瓶颈;运行模拟所花费的时间中,大约 90% 的时间都花在了执行这一功能上。
这是我的功能:
def scanLattice(s_array,t_array,L):
failures = []
for i in xrange(L):
for j in xrange(L):
if s_array[i,j] >= t_array[i,j]:
M = L*j + i
failures.append(M)
return failures
s_array 是要检查其值的数组;它的大小为 [L,L]。 t_array 也是 [L,L] 并保存用于检查 s_array 中的值的阈值。阈值不统一。 t_array 的随机 1% 的元素具有与数组其余部分不同的阈值,这些阈值是统一的。我跟踪这些不统一的站点。因此,我遍历s_array 的行和列并检查t_array 的相应元素,如果满足阈值条件,则将该站点的索引添加到列表中。
任何关于如何以更有效的方式重写此函数的建议将不胜感激。
【问题讨论】:
-
看看
s_array>=t_array和np.where(s_array>=t_array)。
标签: python numpy optimization simulation