次元(A、B、C)の3次元行列 "M"を扱うとき、[0、 A)及びY同じ寸法の[0、B)の要素を持つD.ブール行列を使用してループを置換して高度なインデックスを作成する
より具体的には、私は
M[X,Y,:]
を書き込むときに、我々は各 "I" Dにおいて、
ため、服用していることを理解M[X[i], Y[i], :],
このようにして、 e end。
は今
X is a numpy array of dim U, same concept as before
this time Y is a matrix UxL, where each row correspond to a Boolean numpy array
(a mask)
を想定し、次のコード私はforループをせずに同じコードを書きたい
for u in U:
my_matrix[Y[u], X[u], :] += 1 # Y[u] is the mask that selects specific elements of the first dimension
を見てください。
for u in U: a_matrix[u, Y[u], :] = my_matrix[Y[u], X[u], :]
割り当て
を実行するとき、残念ながら次のエラーIndexError: boolean index did not match indexed array along dimension 0; dimension is L but corresponding boolean dimension is 1
を返します。この
np.add.at(my_matrix, (Y, X), 1) # i use numpy.ufunc.at since same elements could occur multiple times in X or Y.
よう何かが、この問題も見つけることができますが、私は(この問題に対処する方法を知っていますかs)をエレガントな方法で?
3x3x2マトリックスなどの視覚化が簡単な例がありますか? –
私が理解していることを確かめるために、 'Y'は2D行列で、' Y [u] 'は' Y'次元をインデックスする1Dマスクです。しかし、 'X'は1次元行列なので、' X [u] 'は1つの要素です。言い換えれば、forループの作業では、3つのディメンション全体で「Y」で示される行で1つの列に1を追加するたびに、したがって、 'Y [u]'は同じ行の一部を示すことがあります。これは、それらの要素に1を何度も追加することに相当します。あれは正しいですか? –
もしそうなら、私は最善の方法は、最初に 'Y'ベクトルを崩壊させるようなことを行い、全体に加えるために合計行列を計算することだと思います。 –