1

以下の例では、シフトおよびパディングされた実際の結果を含む 2D 配列があります。シフトは行によって異なります (パディングは、numpy で必要なように配列を長方形にするために使用されます)。Python ループなしで実際の結果を抽出することは可能ですか?

import numpy as np

# results are 'shifted' where the shift depends on the row
shifts = np.array([0, 8, 4, 2], dtype=int)
max_shift = shifts.max()
n = len(shifts)

t = 10 # length of the real results we care about

a = np.empty((n, t + max_shift), dtype=int)
b = np.empty((n, t), dtype=int)

for i in range(n):
    a[i] = np.concatenate([[0] * shifts[i],               # shift
                           (i+1) * np.arange(1, t+1),     # real data
                           [0] * (max_shift - shifts[i])  # padding
                           ])
print "shifted and padded\n", a

# I'd like to remove this Python loop if possible
for i in range(n):
    b[i] = a[i, shifts[i]:shifts[i] + t]

print "real data\n", b
4

1 に答える 1

2

2 つの配列を使用してデータを取得できます。

a[np.arange(4)[:, None], shifts[:, None] + np.arange(10)]

また:

i, j = np.ogrid[:4, :10]
a[i, shifts[:, None]+j]

これは、NumPy ドキュメントでは Advanced indexing と呼ばれます。

于 2012-10-22T01:46:43.773 に答える