【发布时间】:2020-06-29 00:37:15
【问题描述】:
如何在这个简单的矩阵赋值中移除循环以提高性能?
nk,ncol,nrow=index.shape
for kk in range(0,nk):
for ii in range(0,nrow):
for jj in range(0,ncol):
idx=index[kk][ii][jj]
counter[idx][ii][jj]+=1
我来自 C++,我发现很难适应 numpy 的函数来执行一些非常基本的矩阵操作,比如这个。我想我已经将它简化为一个一维循环,但这对于我需要的东西来说仍然太慢了,在我看来,必须有一种更直接的方法来做到这一点。有什么建议么?谢谢
for kk in range(0,nk):
xx,yy = np.meshgrid(np.arange(ncol),np.arange(nrow))
counter[index[kk,:,:].flatten(),yy.flatten(),xx.flatten()]+=1
【问题讨论】:
-
你的循环没有意义。考虑分享一个例子。
-
@ps95 如果我解释一下循环来自哪里?我有一个带有维度(时间,x,y)的矩阵温度和由一组代表温度范围(0,1,2,3,..nranges)的索引给出的值。我想为每个 x,y(地球位置)计算给定范围及时出现的次数。为此,我使用一个初始化为 0 且维度为 (nranges, x,y) 的计数器矩阵,并简单地计算每个范围在温度矩阵中出现的次数。