あなたが使用しているので、 Numpyは、Numpyにループ処理をさせるべきです。は、明示的なPythonループを使用するより効率的です。あなたが投稿したコードについては
import numpy as np
k = 10
m = 3
test = np.random.randint(1, 7, size=(k, m))
print(test)
print('- ' * 20)
testSum = np.sum(test, axis=1)
print(testSum)
典型的な出力
[[2 5 1]
[1 5 5]
[6 5 3]
[1 1 1]
[2 5 6]
[4 2 5]
[3 3 1]
[6 4 6]
[2 5 1]
[6 5 2]]
- - - - - - - - - - - - - - - - - - - -
[ 8 11 14 3 13 11 7 16 8 13]
、それはいくつかの問題があります。主なものは、サブリストごとにsum
変数をゼロに設定する必要があるということです。ところで、sum
を変数名として使用しないでください。なぜなら、Pythonに組み込まれているsum
関数を隠すからです。
また、配列アクセスが間違っています。 (また、標準モジュールの名前なので、array
を変数名として使用しないでください)。これらのリストのそれぞれにおける
test
内の各リストの上に
for array in test:
for i in array:
繰り返し処理し、各項目の上
sum += test[array][i]
にインデックスを作成しようとしているので、そうi
は、すでに内側のリストの項目ですtest
リストで整数の代わりにリストを表示し、その結果を現在のアイテムでインデックス化しようとしています(i
)。
(あなたは、ループ変数がコンテナ内のアイテムではなく、それらの指標の値を取るfor
ループにおいてコンテナオブジェクトを反復換言すれば、Pythonで、これはあなたから来ている場合に混乱することができますループ変数がそれらの項目のインデックスを取得する言語です。インデックスが必要な場合は、組み込みのenumerate
関数を使用して、インデックスと項目を同時に取得できます。
修正されたバージョンのコードです。
import numpy as np
k = 10
m = 3
#create array with 10 arrays of length 3
test = [[np.random.randint(1,7) for i in range(m)] for j in range(k)]
print(test)
print()
testSum = []
#go through each sub-array in test array
for array in test:
#add sums of sub-arrays
asum = 0
for i in array:
asum += i
testSum.append(asum)
print(testSum)
典型的な出力
[[4, 5, 1], [3, 6, 6], [3, 4, 1], [2, 1, 1], [1, 6, 4], [3, 4, 4], [3, 2, 6], [6, 3, 2], [1, 3, 5], [5, 3, 3]]
[10, 15, 8, 4, 11, 11, 11, 11, 9, 11]
私が先に言ったように、それがnumpyの配列を使用してnumpyのは、あなたのためのループをやらせるためにはるかに良いです。しかし、あなたのプログラムが小さなリストしか処理していない場合は、Numpyを使う必要はありません。標準のrandom
モジュールの関数を使って乱数を生成し、Rahul KPの答えを使って和を計算します。 Pythonループを使用するよりも速くなります。
おそらく - リスト(マップ(合計、テスト)) –