0

私は最近、次の派手な動作を回避する方法を考えていました。簡単な例から始めます。

    import numpy as np

a = np.array([[1,2,3,4,5,6,7,8,9,0], [11, 12, 13, 14, 15, 16, 17, 18, 19, 10]])

それから:

b = a.copy()
b[:, [0,1,4,8]] = b[:, [0,1,4,8]] + 50
print(b)

...印刷結果:

[[51 52  3  4 55  6  7  8 59  0]
 [61 62 13 14 65 16 17 18 69 10]]

しかし、1 つのインデックス double をスライスに取り込んでから、次のようにします。

c = a.copy()
c[:, [0,1,4,4,8]] = c[:, [0,1,4,4,8]] + 50
print(c)

与える:

[[51 52  3  4 55  6  7  8 59  0]
 [61 62 13 14 65 16 17 18 69 10]]

(要するに、彼らは同じことをします)

また、インデックス 4 の場合は 2 回実行されますか? またはより実際的に; スライス要素 i を r 回与えるとします: numpy を 1 回だけ考慮するのではなく、上記の式を r 回適用できますか? また、「50」を i の出現ごとに異なるものに置き換えるとどうなりますか?

現在のコードでは、次を使用しました。

w[p1] = w[p1] + D[pix]

ここで、「pix」、「p1」を、dtype int、同じ長さ、およびいくつかの整数が複数回出現する可能性のあるnumpy配列として定義します。

(したがって、pix = [..., 1,1,1,2,2,3,...] と同時に p1 = [..., 21,32,13,23,11, 78、...]、しかし、したがって、インデックス 1 として最初の 1 と対応する 21 のみを取得し、残りのものをスクレイピングすることになります。)

もちろん、for ループを使用すると、問題は簡単に解決されます。ポイントは、配列の整数とサイズの両方が巨大であるため、効率的な numpy-array ルーチンの代わりに for ループを使用すると、多くの計算リソースが消費されることです。アイデア、既存のドキュメントへのリンクなどはありますか?

4

0 に答える 0