• 締切済み

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対応になってきているので速さの問題があっても器用な処理ができるのなら選択されることも多いと思いますが。 よろしくお願いします。

みんなの回答

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.4

> 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)
回答No.3

>配列という言葉はあまりpythonでは使われないのでしょうか。リスト、タプルというような説明が多いです。 まぁpythonで配列にあたるのはリストやタプルですから。

  • f272
  • ベストアンサー率46% (8467/18126)
回答No.2

こんな感じ 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)

skmsk1941093
質問者

お礼

回答ありがとうございます。 確認です。1行目の宣言が必要、すなわち受け皿としての配列を最初に宣言しておく必要があるということでしょうか。このように先にデータの格納先を決めておくのはCとかFortranのスタイルと同じであり、pythonっぽくないように思いました。 また、def(x)の返り値(return)でx+1としているのはどうしてでしょうか。切り上げとかでしょうか。私の想定では実数なのですが。

  • Nobu-W
  • ベストアンサー率39% (725/1832)
回答No.1

https://techacademy.jp/magazine/18807 参考になりますか?

参考URL:
https://techacademy.jp/magazine/18807
skmsk1941093
質問者

お礼

回答ありがとうございます。 このページは検索しておりました。配列のデータが先にあってそれを取り出す説明が中心だったように思います。配列形式のデータの1つ1つの要素に値を入れていく方法が示されていないように思いました。配列という言葉はあまりpythonでは使われないのでしょうか。リスト、タプルというような説明が多いです。どのテキストを見ても a=[[1,2,3], [3,5,2]] のようにプログラムの冒頭に配列データがあるという説明が多いように思うのですが。

関連するQ&A