2

質問があります。私は現在、matlab から python に移行していますが、numpy と scipy に簡単に適応できることがわかりましたが、一部の部分はまだ少し謎めいています;)

私がやりたいことは、2 つの入れ子になったループでデータを計算し、それを (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

これは、値を格納するために明示的なインデックスを必要としない解決策の 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 に答える