用于arange循环时的python数组索引

时间:2013-03-29 07:23:05

标签: python arrays indexing range

我有一个问题。我目前正在从matlab转移到python,虽然我发现很容易适应numpy和scipy,但有些部分仍然有点神秘;)

我想要做的是在两个嵌套循环中计算数据并将其(重新整形)放入(m,n)数组中以制作等高线图。

所以我想到了以下内容:

for i in arange(1, 10, 1):
    for k in arange(5, 50, 5):
        res = do_something(i, k)

但是现在我并不完全确定我应该如何将它设置为正确的形状(在Matlab中我只是用i = 1:1:10索引循环,依此类推并从矢量中拉出i的实际值...)。

我可以将结果附加到res.append(res)并使用res.reshape((m,n))重新整形。但是可能有一种更优雅的方式呢?

非常欢迎每一位帮助!

最好的祝福, 克里斯

2 个答案:

答案 0 :(得分:1)

这是一种可能的解决方案,不需要explict索引来存储值

result = [[my_function(x, y)
           for x in arange(0.3, 10.7, 2.2)]
          for y in arange(-3.2, 5.4, 0.7)]

对于需要使用enumerate(arange(...))的explict索引的情况,它既紧凑又易读。

我不确定这是用numpy构建大型矩阵的最有效方法(如果你需要一些速度,那么你应该在多个简单的操作中分解函数,每个操作都用numpy显式执行)。

答案 1 :(得分:0)

我建议你使用循环来匹配结果数组中结果的索引,而不是计算函数中的参数。

result = numpy.zeros((n,m), dtype=float) # I'm assuming your results are float.
for i in range(10):
    for k in range(10):
        res[i,j] = do_something(i+1, 5k+5) #don't forget range(M) starts at 0 and ends at M-1 (giving you M values)
相关问题