2012-04-11 2 views
2

나는 그들 중 하나가 비어 형 float64, 두 ndarrays을 비교하면, 내가 부울의 빈 배열을 얻을 :ndarray 비교

x = np.array([1.0,2.1]) #dtype is float64 
y = np.array([])  #dtype is float64 

x==ybool의 DTYPE와 빈 ndarray을 반환합니다. 나는 그들 중 하나가 비어 유형 int32, 두 ndarrays 비교하면

그러나, 나는 거짓 얻을 : 무엇 제공

거짓

a = np.array([1,2]) 
b = np.array([], dtype='int32') 

a==b 반환? 반환 된 형식이 다른 이유는 무엇입니까? 내가하려고하는 것은 유형이 float64 인 두 개의 ndarrays를 비교하는 것입니다.

파이썬 2.6.4, NumPy와 1.6.1, Windows XP에서 수행되고

편집 : "일을하려고하는 유형 'float5'의 두 ndarrays 비교입니다"- "두 ndarrays을 비교하는 시도> 'float64'를 입력하십시오. "

+3

파이썬/numpy/플랫폼의 조합에 부동 소수점 사례를 재현 할 수 없습니다. MacOS 10.6/python 2.5/numpy 1.3, Linux 64 비트/파이썬 2.6/numpy 1.4 및 Windows 7 32 비트/파이썬 2.7/numpy 1.6.1. – talonmies

+2

@talonmies : 여기에있는 것과 동일한 것 : 둘 다 예상대로 False를 반환합니다 (Mac OS X 10.7, MacPorts의 Python 2.7.2 용 NumPy 1.6.1). – EOL

+2

@MartinisGroup : "float64' 유형의 두 개의 ndarrays를 의미합니까? – EOL

답변

1

모든 그래서 일단,

a = np.array([1,2]) 
b = np.array([], dtype='int32') 

a 반드시 INT32 배열되지 않습니다; 그것은 당신의 머신의 네이티브 정수 타입에 의존 할 것이다. 나는 그것을 재현 할 수 없으므로 빈 bool 배열 동작을 설명 할 수 없다.

이제 "float64 유형의 두 개의 ndarrays 비교"란 무엇을 의미합니까? 그것들을 비교하여 그들이 같은 모양인지 그리고 모든 요소가 같은지 확인하십시오. 몇 가지 이유로 ==을 사용하는 것은 나쁜 생각입니다.

두 가지가 같은 모양 인 경우 결과는 부울이 아니라 부울 배열입니다. 적어도 결과 배열의 np.all()에 전화하기를 원할 것입니다.

또한 하나 또는 다른 배열이 일부 부동 소수점 계산의 결과 인 경우 부동 소수점 반올림 오류로 인해 실제로 동일하지만 같지 않을 수 있습니다. np.allclose(a1, a2) 함수는이 경우를 위해 설계되었습니다 (허용 오차 수준을 변경하기 위해 키워드 인수를 지정할 수 있음). 두 배열의 모양이 다른 경우에는 False을 정상적으로 반환합니다.