1

np.nditer() を使用して、ネストされた (numpy) 配列を反復処理しようとしています。

ネストされた int のリストをネストされた numpy 配列に変換しました。

from numpy import mean, array, nditer

nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]

np_array = []
for i in nested_list:
    a = array(nested_list)
np_array.append(a)

上記の作品は、降伏します。

[array([[1,2,3],
       [2,3,4],
       [3,4,5],
       [4,5,6]])]

ネストされた各サブリストの平均を計算したい...これを試しましたが、正しく機能していません。

np_mean = []
c = 0
for i in nditer(np_array):
    m = mean(i)
    np_mean_rep.append(m)
    c += 1
print np_mean_rep

...これはネストされた配列をフラット化するので、ネストされた各サブリストを指すのではなく、各値を指します。これが機能するようにnditerをどのように使用しますか? どんなポインタでも大歓迎です!

4

1 に答える 1

3

【コメントより転載】

必要以上に物事を難しくしていると思います。配列には.mean()メソッドがあり、行ごとにオブジェクトを作成する必要はありません。すべてを一度に行うことができます。

>>> import numpy as np
>>> nested_list = [[1,2,3],[2,3,4],[3,4,5],[4,5,6]]
>>> np.array(nested_list)
array([[1, 2, 3],
       [2, 3, 4],
       [3, 4, 5],
       [4, 5, 6]])
>>> np.array(nested_list).mean(axis=1)
array([ 2.,  3.,  4.,  5.])
>>> np.array(nested_list).mean(axis=0)
array([ 2.5,  3.5,  4.5])

このaxisパラメーターは、平均を取得する配列の次元を指定します。

一般に、常にではありませんが、 でforループを書いnumpyていることに気付いた場合は、何か間違ったことをしています。作業するときの基本的なルールnumpyは、すべてをベクトル化しようとすることです (つまり、配列全体で一度に実行できる操作に関してコードを記述します)。つまり、面倒な作業は遅い C ライブラリではなく、速い C ライブラリで行われます。パイソンレベル。

于 2013-05-10T14:53:41.183 に答える