私はPythonとnumpyの初心者ですので、サンプルコードを実行して理解のために修正しようとしています。 numpy.sum
についてのコードがありましたが、axis
というパラメータがありましたが、実行できませんでした。いつか(scipyドキュメントを読んで、実験をしようとした)、axis = 1
の代わりにaxis = (1,2,3)
を使って実行しました。Python numpy sum軸の動作を伴う関数
事はどこでも私が検索すると、彼らは仕事を得るためにのみaxis = 1
を書く。
私はPython 3.5.3を使っていますが、numpyは1.12.1です。 動作に大きな違いがあるnumpy/pythonバージョンがありましたか?それとも何らかの形で間違って設定しただけですか?
import numpy as np
from past.builtins import xrange
# sample data
X = np.arange(1, 4*4*3*5+1).reshape(5, 4, 4, 3)
Y = np.arange(5, 4*4*3*8+5).reshape(8, 4, 4, 3)
Xlen = X.shape[0]
Ylen = Y.shape[0]
# allocate some space for whatever calculation
rs = np.zeros((Xlen, Ylen))
rs1 = np.zeros((Xlen, Ylen))
# calculate the result with 2 loops
for i in xrange(Xlen):
for j in xrange(Ylen):
rs[i, j] = np.sum(X[i] + Y[j])
# calculate the result with one loop only
for i in xrange(Xlen):
rs1[i, :] = np.sum(Y + X[i], axis=(1,2,3))
print(rs1 == rs) # same result
# also with one loop, as everywhere on the internet:
for i in xrange(Xlen):
rs1[i, :] = np.sum(Y + X[i], axis=1)
# ValueError: could not broadcast input array from shape (8,4,3) into shape (8)
'軸= 1'合計だけが一次元。結果は次元 'ndim - 1'の配列です。あなたの場合、それは3次元であり、 '(8、4、3)'の形をしています。これは出力配列 'rs1 [i、:]'と互換性がありません。これは2つの次元しかありません。 – MaxPowers