- 締切済み
pythonの多次元配列へのデータ入力
pythonの多次元配列で以下のように、ループのカウンタのn,mで配列の位置を指定して代入することができないようです。このような場合どう処理するのでしょうか。 for n in range(1:10) for m in range(1:10) a[n][m]=f(n/m) なお、aについては使用の宣言はしておらず、メモリも確保されていません。fは別途用意されています。 また、a[2][3]=1.3 のように配列の場所を指定して代入するのもダメのようです。numpy.arrayとかで宣言するのかなと思うのですが。使用例が見つかりません。2次元配列だけでなく3次元配列だとどうなるかなと思うのですが。 科学技術計算はこんなのばっかりです。pythonはそのようなものに向くでしょうか。いろんなものがpython対応になってきているので速さの問題があっても器用な処理ができるのなら選択されることも多いと思いますが。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- f272
- ベストアンサー率46% (8467/18126)
> 1行目の宣言が必要、すなわち受け皿としての配列を最初に宣言しておく必要があるということでしょうか。 そうですね。 numpyを使うとしても,たぶんこんな感じ。 from numpy import * a = zeros((10, 10)) for n in range(1,10): for m in range(1,10): a[n][m]=f(n/m) print(a) > このように先にデータの格納先を決めておくのはCとかFortranのスタイルと同じであり、pythonっぽくないように思いました。 それが嫌なら a=[] for n in range(1,10): for m in range(1,10): a.append(f(n/m)) a = [a[i:i + 9] for i in range(0, len(a), 9)] print(a) こんな感じにもできる。 > また、def(x)の返り値(return)でx+1としているのはどうしてでしょうか。切り上げとかでしょうか。私の想定では実数なのですが。 適当な関数をでっち上げただけです。自分の使う関数に置き換えて考えてください。
- wormhole
- ベストアンサー率28% (1626/5665)
>配列という言葉はあまりpythonでは使われないのでしょうか。リスト、タプルというような説明が多いです。 まぁpythonで配列にあたるのはリストやタプルですから。
- f272
- ベストアンサー率46% (8467/18126)
こんな感じ a = [[0 for i in range(10)] for j in range(10)] def f(x): return x+1 for n in range(1,10): for m in range(1,10): a[n][m]=f(n/m) print(a)
- Nobu-W
- ベストアンサー率39% (725/1832)
https://techacademy.jp/magazine/18807 参考になりますか?
お礼
回答ありがとうございます。 このページは検索しておりました。配列のデータが先にあってそれを取り出す説明が中心だったように思います。配列形式のデータの1つ1つの要素に値を入れていく方法が示されていないように思いました。配列という言葉はあまりpythonでは使われないのでしょうか。リスト、タプルというような説明が多いです。どのテキストを見ても a=[[1,2,3], [3,5,2]] のようにプログラムの冒頭に配列データがあるという説明が多いように思うのですが。
お礼
回答ありがとうございます。 確認です。1行目の宣言が必要、すなわち受け皿としての配列を最初に宣言しておく必要があるということでしょうか。このように先にデータの格納先を決めておくのはCとかFortranのスタイルと同じであり、pythonっぽくないように思いました。 また、def(x)の返り値(return)でx+1としているのはどうしてでしょうか。切り上げとかでしょうか。私の想定では実数なのですが。