파이썬 list
은 remove
메서드를가집니다. 이 np.array(...)
와 배열로 다시 설정 될 수
def foo(i,j,k):
il = i.tolist()
il.remove(j)
il.remove(k)
return il
In [230]: [foo(i,j,k) for i,j,k in zip(a,b,c)]
Out[230]: [[4, 5], [2, 5], [3, 9]]
: 우리는 행에 대한 최소 및 최대 요소를 제거 할 수있는 유틸리티 함수와
. 이 경우 마지막 행의 9
중 하나만 제거되었습니다. 두 항목을 모두 제거한 경우 마지막 목록의 값은 1이고 결과를 2 차원 배열로 되돌릴 수 없습니다.
아마도 max
및 min
대신 argmax
및 argmin
을 사용할 수있는 순수 배열 방법을 제안 할 수있을 것입니다. 그러나 목록 접근 방식이 파이썬 초보자에게 더 좋은 출발점이라고 생각합니다.
배열 마스킹 방법
In [232]: bi = np.argmax(a,1)
In [233]: ci = np.argmin(a,1)
In [234]: bi
Out[234]: array([3, 1, 1], dtype=int32)
In [235]: ci
Out[235]: array([0, 3, 3], dtype=int32)
In [243]: mask = np.ones_like(a, bool)
In [244]: mask[np.arange(3),bi]=False
In [245]: mask[np.arange(3),ci]=False
In [246]: mask
Out[246]:
array([[False, True, True, False],
[ True, False, True, False],
[ True, False, True, False]], dtype=bool)
In [247]: a[mask]
Out[247]: array([4, 5, 2, 5, 3, 9])
In [248]: _.reshape(3,-1)
Out[248]:
array([[4, 5],
[2, 5],
[3, 9]])
우리가 단지 하나 개의 최대 각 열에서 한 분을 삭제하면 다시이 좋다.
또 다른 마스킹 방법 : 이것은 마지막 행의 모든 '9 년대를 제거 않습니다
In [257]: (a!=b[:,None]) & (a!=c[:,None])
Out[257]:
array([[False, True, True, False],
[ True, False, True, False],
[ True, False, False, False]], dtype=bool)
In [258]: a[(a!=b[:,None]) & (a!=c[:,None])]
Out[258]: array([4, 5, 2, 5, 3])
. 그러나 행 분리를 유지하지는 않습니다.
이 가변 길이를 행 구조를 유지하고 있도록 :
In [259]: mask=(a!=b[:,None]) & (a!=c[:,None])
In [260]: [i[j] for i,j in zip(a, mask)]
Out[260]: [array([4, 5]), array([2, 5]), array([3])]
(이상 만 보인다는 당신이 요구하는지 무엇을 할 수 있습니다). – user
게시 된 솔루션 중 어느 것이 적합합니까? 그렇다면, 그 중 하나를 수락 고려하십시오? – Divakar
죄송합니다! 나는이 웹 사이트에 익숙하지 않았다. 그리고 네, 최선의 대답을 받아 들였습니다. 고맙습니다. – user