我有一个问题。我目前正在从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))重新整形。但是可能有一种更优雅的方式呢?
非常欢迎每一位帮助!
最好的祝福, 克里斯答案 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)