我有一个小问题,了解Numpy数组中的索引。我认为一个简单的例子最好能够了解我想要做什么。 所以首先我创建一个我要填充的大小的数组:
x = range(0,10,2)
y = range(0,10,2)
a = zeros(len(x),len(y))
这样会给我一个5X5的零数组。现在,我想用一个相当复杂的函数填充数组,我无法使用网格。我的问题是我想迭代为:
for i in xrange(0,10,2):
for j in xrange(0,10,2):
.........
"do function and fill the array corresponding to (i,j)"
然而,现在我想成为[2,10]的是2和10的函数,而是函数2和10的索引将是[1,4]或其他。
同样,也许这是基本的,我已经查看了文档并发现自己不知所措。
编辑: 最后,我尽可能地进行矢量化,并编写了我无法在Cython中进行的模拟循环。此外,我使用Joblib来并行化操作。我将结果存储在列表中,因为在并行运行时,数组没有正确填充。然后我使用Itertools将列表分成单独的结果和Pandas来组织结果。 感谢您的所有帮助
答案 0 :(得分:2)
一些提示让您完成工作以保持良好的表现:
- avoid Python `for` loops
- create a function that can deal with vectorized inputs
示例:
def f(xs, ys)
return x**2 + y**2 + x*y
您可以将xs
和ys
作为数组传递,操作将按元素完成:
xs = np.random.random((100,200))
ys = np.random.random((100,200))
f(xs,ys)
您应该阅读有关numpy
broadcasting的更多信息,以便更好地了解阵列的运算方式。这将帮助您设计一个可以正确处理数组的函数。
答案 1 :(得分:0)
首先,你缺少一些带零的括号,第一个参数应该是一个元组:
a = zeros((len(x),len(y)))
然后,您的表的相应索引是i / 2和j / 2:
for i in xrange(0,10,2):
for j in xrange(0,10,2):
# do function and fill the array corresponding to (i,j)
a[i/2, j/2] = 1
但我是第二个Saullo Castro,你应该尝试对你的计算进行矢量化。