私がm x n配列を持っているとします。この配列の各列を関数に渡して、列全体で何らかの操作を実行したいと思います。配列の列を反復処理するにはどうすればよいですか?
たとえば、次のような4 x 3の配列があります
1 99 2
2 14 5
3 12 7
4 43 1
for column in array:
some_function(column)
列は、最初の反復では「1,2,3,4」、2番目の列では「99,14,12,43」、3番目の列では「2,5,7,1」になります。
配列の転置を繰り返します:
for column in array.T:
some_function(column)
これはあなたにスタートを与えるはずです
>>> for col in range(arr.shape[1]):
some_function(arr[:,col])
[1 2 3 4]
[99 14 12 43]
[2 5 7 1]
for c in np.hsplit(array, array.shape[1]):
some_fun(c)
3次元配列の場合、次を試すことができます。
for c in array.transpose(1, 0, 2):
do_stuff(c)
array.transpose
の仕組みに関するドキュメントを参照してください。基本的に、シフトする次元を指定します。この場合、2番目の次元(列など)を最初の次元にシフトしています。
たとえば、マトリックスの各列の平均を求めたいとします。次のマトリックスを作成しましょう
mat2 = np.array([1,5,6,7,3,0,3,5,9,10,8,0], dtype=np.float64).reshape(3, 4)
平均の関数は
def my_mean(x):
return sum(x)/len(x)
必要なことを行い、結果をコロンベクトル「結果」に保存するには
results = np.zeros(4)
for i in range(0, 4):
mat2[:, i] = my_mean(mat2[:, i])
results = mat2[1,:]
結果は次のとおりです。array([4.33333333、5.、5.66666667、4.])
Unzipを使用して列を反復処理することもできます
for col in Zip(*array):
some_function(col)