【发布时间】:2014-03-21 17:57:10
【问题描述】:
我在 python 中有一个包含以下元素的代码:
我有一个类似这样的intensities 向量:
array([ 1142., 1192., 1048., ..., 29., 18., 35.])
我还有一个x 向量,看起来像这样:
array([ 0, 1, 1, ..., 1060, 1060, 1061])
然后,我使用 for 循环填充另一个向量 radialDistribution,如下所示:
for i in range(1000):
radialDistribution[i] = sum(intensities[np.where(x == i)]) / len(np.where(x == i)[0])
问题是完成它需要 20 秒...因此我想对其进行矢量化。但是我对在 Numpy 中进行广播还是很陌生,并且在那里没有找到太多东西......因此我需要你的帮助。
我试过了,但没有用:
i= np.ogrid[:1000]
intensities[i] = sum(sortedIntensities1D[np.where(sortedDists1D == i)]) / len(np.where(sortedDists1D == i)[0])
你能帮我告诉我应该去哪里学习 Numpy 的向量化过程吗?
提前感谢您的宝贵帮助!
【问题讨论】:
-
stackoverflow.com/questions/22261126/… 是一个类似的问题。它希望将值收集到列中,但获取它们的
mean()会更容易。注意接受的答案使用pandas.groupby。 -
谨慎使用
sum与 numpy 数组。请改用numpy.sum或arr.sum()。另外,不要做arr[np.where(x == i)]。相反,只需直接使用布尔数组进行索引:arr[x == i]。可能是(?)那两个让你慢下来(主要是sumvsnumpy.sum)。
标签: python arrays numpy vectorization