2

我有个问题。我目前正在从 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)) 对其进行整形。但是可能有一种更优雅的方式来做到这一点?

非常欢迎每一个帮助!

最好的祝愿,克里斯

4

2 回答 2

1

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

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(...))既紧凑又可读。

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

于 2013-03-29T07:38:45.310 回答
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)
于 2013-03-29T07:39:05.467 回答