0
열 인덱스가 cutoff[i]
, 0 < = i
보다 큰 모든 위치에서 수십만 행 ~ 500 열의 큰 배열을 효율적으로 마스크하려고합니다. < 행 수입니다.열 인덱스가 각 행에 고유 한 특정 컷오프보다 클 때 마스크 배열 항목
In [2]: x = np.random.randint(0,100,size=24).reshape((6,4)); x
Out[2]:
array([[86, 50, 19, 49],
[41, 80, 94, 50],
[36, 58, 66, 50],
[67, 45, 76, 18],
[80, 14, 10, 30],
[25, 90, 44, 38]])
In [3]: cutoff = np.array([10,4,3,2,1,0]); cutoff
Out[3]: array([10, 4, 3, 2, 1, 0])
가 지금은 기본적으로 mask
mask[:, cutoff:]=True
로를 만들려하지만, 물론이 나에게 오류를 제공합니다 : 여기
[[86 50 19 49]
[41 80 94 50]
[36 58 66 --]
[67 45 -- --]
[80 -- -- --]
[-- -- -- --]]
다음과 같은 빠른 방법이 있습니까?
In [4]: mask = np.zeros_like(x)
In [5]: for row in range(x.shape[0]):
...: mask[row, cutoff[row]:] = 1
...:
In [6]: mask
Out[6]:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 1, 1, 1],
[1, 1, 1, 1]])
In [7]: np.ma.array(x, mask=mask)
Out[7]:
masked_array(data =
[[86 50 19 49]
[41 80 94 50]
[36 58 66 --]
[67 45 -- --]
[80 -- -- --]
[-- -- -- --]],
mask =
[[False False False False]
[False False False False]
[False False False True]
[False False True True]
[False True True True]
[ True True True True]],
fill_value = 999999)
더 쉽고 빠르면 팬더를 사용할 수 있습니다.
천재 감사를! – mtrbean