특정 경우 에 가장 좋은 방법은 두 가지 기준을 하나의 기준으로 변경하는 것입니다.
dists[abs(dists - r - dr/2.) <= dr/2.]
그것은 하나 개의 부울 배열을 생성하고, 내 의견으로는, 그것이 말하는 때문에 쉽게 읽을 수 있다 dist
내에서 dr
또는 r
? (하지만 r
처음부터 관심 지역의 중심으로 재정의하고 싶지만 r = r + dr/2.
) 그러나 귀하의 질문에 대답하지 않습니다.
귀하의 질문에 대한 답변 : 기준에 맞지 않는 요소를 필터링하려고하는 경우
실제로 필요 하지 않습니다.where
dists
dists[(dists >= r) & (dists <= r+dr)]
&
는 요소별로 요소를 제공 하기 때문에 and
(괄호가 필요합니다).
또는 where
어떤 이유로 사용하려면 다음을 수행하십시오.
dists[(np.where((dists >= r) & (dists <= r + dr)))]
이유 :
작동하지 않는 이유 np.where
는 부울 배열이 아닌 인덱스 목록을 반환 하기 때문 입니다. and
두 숫자 목록 사이 를 가져 오려고하는데 물론 True
/ False
값 이 없습니다 . 경우 a
와 b
모두 True
값, 다음 a and b
반환 b
. 따라서 이와 같은 말 [0,1,2] and [2,3,4]
은 당신에게 줄 것 [2,3,4]
입니다. 여기 실제로 작동합니다.
In [230]: dists = np.arange(0,10,.5)
In [231]: r = 5
In [232]: dr = 1
In [233]: np.where(dists >= r)
Out[233]: (array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19]),)
In [234]: np.where(dists <= r+dr)
Out[234]: (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),)
In [235]: np.where(dists >= r) and np.where(dists <= r+dr)
Out[235]: (array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]),)
예를 들어 비교하려고 한 것은 단순히 부울 배열이었습니다.
In [236]: dists >= r
Out[236]:
array([False, False, False, False, False, False, False, False, False,
False, True, True, True, True, True, True, True, True,
True, True], dtype=bool)
In [237]: dists <= r + dr
Out[237]:
array([ True, True, True, True, True, True, True, True, True,
True, True, True, True, False, False, False, False, False,
False, False], dtype=bool)
In [238]: (dists >= r) & (dists <= r + dr)
Out[238]:
array([False, False, False, False, False, False, False, False, False,
False, True, True, True, False, False, False, False, False,
False, False], dtype=bool)
이제 np.where
결합 된 부울 배열을 호출 할 수 있습니다 .
In [239]: np.where((dists >= r) & (dists <= r + dr))
Out[239]: (array([10, 11, 12]),)
In [240]: dists[np.where((dists >= r) & (dists <= r + dr))]
Out[240]: array([ 5. , 5.5, 6. ])
또는 멋진 색인 생성을 사용하여 원래 배열을 부울 배열로 색인화합니다.
In [241]: dists[(dists >= r) & (dists <= r + dr)]
Out[241]: array([ 5. , 5.5, 6. ])
()
주위(ar>3)
와(ar>6)
?