2

ループを使用しないと解決できない比較的単純な問題があります。この問題の正しいタイトルを見つけるのは難しいです。2 つの numpy 配列があるとします。

array_1 = np.array([[0, 1, 2],
                    [3, 3, 3],
                    [3, 3, 4],
                    [3, 6, 2]])

array_2 = np.array([[0, 0, 0], 
                    [1, 1, 1],
                    [2, 2, 2],
                    [3, 3, 3],
                    [4, 4, 4],
                    [5, 5, 5],
                    [6, 6, 6]])

array_1は、 の行のインデックスを表しarray_2ますsum。したがって、たとえば、配列の4th 行には、array_1 のすべての s と同じ行インデックスを持つ合計されたすべての行が含まれている必要があります。resultarray_23

コードでそれを理解するのははるかに簡単です:

result = np.empty(array_2.shape)

for i in range(array_1.shape[0]):
    for j in range(array_1.shape[1]):
        index = array_1[i, j]
        result[index] = result[index] + array_2[i]

結果は次のようになります。

[[ 0  0  0]
 [ 0  0  0]
 [ 3  3  3]
 [10 10 10]
 [ 2  2  2]
 [ 0  0  0]
 [ 3  3  3]]

使用しようとしましnp.einsumたが、配列内の両方の要素をインデックスとして使用し、その行もインデックスとして使用する必要があるため、np.einsumここで最適なパスかどうかはわかりません。

これは私がグラフィックで抱えている問題です。array_1三角形の頂点のインデックスをarray_2表し、行のインデックスが頂点のインデックスに対応する法線を表します

4

1 に答える 1