3

私は MATLAB から Numpy への移行を行っており、いくつかの成長痛を感じています。

私は 3D 配列を持っています。それが 3x3x3 で、各平面のスカラー和が欲しいとしましょう。matlab では、次を使用します。

sum_vec = sum(3dArray,3);

TIA wbg

編集:私は自分の matlab コードについて間違っていました。Matlab は 1 つの次元でのみベクトル化するため、ループが必要になります。そのため、numpy はよりエレガントであることがわかりました...クールです。

MATLAB
for i = 1:3
    sum_vec(i) = sum(sum(3dArray(:,:,i));
end
4

5 に答える 5

7

できるよ

sum_vec = np.array([plane.sum() for plane in cube])

または単に

sum_vec = cube.sum(-1).sum(-1)

cubeあなたの3次元配列はどこにありますか。平面の方向に応じて、(または)の代わりに0またはを指定できます。後者のバージョンは、Python ループを使用しないため、より優れています。これは、通常、.1-12numpy

于 2012-11-25T21:39:21.173 に答える
4

axisキーワード inを使用する必要がありますnp.sum。他の多くの numpy 関数と同様にaxis、特定の軸に沿って操作を実行できます。たとえば、配列の最後の次元に沿って合計したい場合は、次のようにします。

import numpy as np
sum_vec = np.sum(3dArray, axis=-1)

そして、すべての配列 slices の最後の次元に沿った合計に対応する結果の 2D 配列が得られます3dArray[i, k, :]

アップデート

私はあなたが何を望んでいるのか正確には理解できませんでした。2 つの次元 (平面) で合計したい。この場合、2 つの合計を実行できます。たとえば、最初の 2 つの次元を合計すると、次のようになります。

sum_vec = np.sum(np.sum(3dArray, axis=0), axis=0)
于 2012-11-25T21:37:32.833 に答える