4

numpy配列、、がありaますa.shape=(48,90,144)。配列のa重みを使用して、最初の軸に沿ったの加重平均を取得したいと思います。したがって、出力は形状の多数の配列である必要があります。bb.shape=(90,144)(48,)

私はこれがリスト内包で行うことができることを知っています:

np.array([np.average(a[i], weights=b) for i in range(48)])

ただし、リストからnumpy配列に変換し直す必要はありません。

誰か助けてもらえますか?これは、numpy関数とスライスを使用して可能であると確信していますが、行き詰まっています。ありがとう!

4

2 に答える 2

6

一行で:

np.average(a.reshape(48, -1), weights=b.ravel()), axis=1)

あなたはそれをテストすることができます:

a = np.random.rand(48, 90, 144)
b = np.random.rand(90,144)
np.testing.assert_almost_equal(np.average(a.reshape(48, -1),
                                          weights=b.ravel(), axis=1),
                               np.array([np.average(a[i],
                                                    weights=b) for i in range(48)]))
于 2013-01-24T18:54:51.673 に答える
0

それは私が思いつくことができた断食でした:

(a * b).mean(-1).mean(-1) * (b.size / b.sum())

これは、任意の数のソースおよび結果のディメンションに適合できます。

形状変更と1x平均はそれ以上スピードアップしませんでした:

(a * b).reshape(len(a), -1).mean(-1) * (b.size / b.sum())
于 2016-08-25T13:21:39.597 に答える