Numpy Array索引问题

时间:2013-08-08 21:49:39

标签: python arrays numpy

我有一个小问题,了解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来组织结果。 感谢您的所有帮助

2 个答案:

答案 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

您可以将xsys作为数组传递,操作将按元素完成:

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,你应该尝试对你的计算进行矢量化。