我正在寻找一种Numpy(即希望更快)的方法来执行以下操作:
import numpy as np
x = np.array([1,2,3,4,5],dtype=np.double)
arr = [[1,2],[0,4,3],[1,4,0],[0,3,4],[1,4]]
ans = np.array([ x[item] - x[i] for i, item in enumerate(arr) ])
我想摆脱列表理解,像这样做(尽管,我知道这行不通)
^{pr2}$arr
始终是长度等于x
长度的整数嵌套列表。内部列表的长度不一定相同(即arr
是一个参差不齐的列表)
我已经提出了一个解决方案,它足够我的应用程序使用Numpy掩码数组。在我的应用程序中,
arr
列表并不是“太粗糙”(也就是说,任何内部列表的最大长度与任何内部列表的最小长度没有太大差别)。因此,我首先用-1
s填充arr
,然后根据-1
s的位置创建一个掩码。我执行我的操作并在结果数组上使用掩码。在本例中,有一些不必要的额外计算(在填充的条目上),但这仍然比Python循环快(快2倍)。示例代码如下:这有点麻烦,但对我来说已经足够了。如果Numpy支持参差不齐的数组,那就太好了。在
相关问题 更多 >
编程相关推荐