web-dev-qa-db-ja.com

配列の列を反復処理する方法はありませんか?

私が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」になります。

86
User

配列の転置を繰り返します:

for column in array.T:
   some_function(column)
174
tillsten

これはあなたにスタートを与えるはずです

>>> for col in range(arr.shape[1]):
    some_function(arr[:,col])


[1 2 3 4]
[99 14 12 43]
[2 5 7 1]
12
Abhijit
for c in np.hsplit(array, array.shape[1]):
    some_fun(c)
4
user3061373

3次元配列の場合、次を試すことができます。

for c in array.transpose(1, 0, 2):
    do_stuff(c)

array.transpose の仕組みに関するドキュメントを参照してください。基本的に、シフトする次元を指定します。この場合、2番目の次元(列など)を最初の次元にシフトしています。

3
stevej

たとえば、マトリックスの各列の平均を求めたいとします。次のマトリックスを作成しましょう

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.])

0
Lucy Nowacki

Unzipを使用して列を反復処理することもできます

for col in Zip(*array):
   some_function(col)
0
Adi