IT

숫자가 어떤 종류의 int인지(core 또는 numpy, signed 여부) 어떻게 판단합니까?

itgroup 2023. 9. 10. 12:09
반응형

숫자가 어떤 종류의 int인지(core 또는 numpy, signed 여부) 어떻게 판단합니까?

변수가 유형인지 여부를 테스트해야 합니다.int, 또는 그 중의np.int*,np.uint*, 가급적 단일 조건(즉, 없음)을 사용합니다.or).

몇 가지 테스트를 해본 결과 다음과 같이 생각이 듭니다.

  • isinstance(n, int)일치할 뿐입니다int그리고.np.int32(또는np.int64플레이트 폼에 따라),
  • np.issubdtype(type(n), int)모든 것이 일치하는 것 같습니다.int그리고.np.int*, 일치하지 않습니다.np.uint*.

이를 통해 두 가지 질문으로 이어집니다. 의지np.issubdtype어떤 종류의 서명된 int와 일치합니까?숫자가 서명된 것인지 서명되지 않은 것인지를 한 번의 검사로 확인할 수 있습니까?

이것은 정수에 대한 테스트에 관한 것입니다. 테스트가 반환되어야 합니다.False부표 운반용으로

NumPy는 Python 형식이 아닌 하위 형식 검사에 사용할 수 있는 기본 클래스를 제공합니다.

사용하다np.integer서명된 정수 또는 서명되지 않은 정수의 인스턴스를 확인합니다.

사용하다np.signedinteger그리고.np.unsignedinteger서명된 유형 또는 서명되지 않은 유형을 확인합니다.

>>> np.issubdtype(np.uint32, np.integer)
True
>>> np.issubdtype(np.uint32, np.signedinteger)
False
>>> np.issubdtype(int, np.integer)
True
>>> np.issubdtype(np.array([1, 2, 3]).dtype, np.integer)
True

모든 부동 또는 복소수 유형이 반환됩니다.False시험해 보면

np.issubdtype(np.uint*, int)항상 그럴 것입니다False왜냐하면 파이썬은int는 서명된 유형입니다.

이 모든 기본 클래스 간의 관계를 보여주는 유용한 참고 자료는 여기 설명서에서 찾을 수 있습니다.

enter image description here

python에게 tuple 타입을 전달하는 것을 제안합니다.isinstance()내장 기능그리고 당신의 질문과 관련해서는np.issubtype()서명된 int와 일치하지 않습니다. 클래스가 두 번째 클래스의 하위 클래스인지 여부를 결정합니다.그리고 모든 정수형(int8, int32 등)은 다음과 같은 하위 클래스입니다.int다음 유형 중 하나를 전달하면 True가 반환됩니다.int.

다음은 예입니다.

>>> a = np.array([100])
>>> 
>>> np.issubdtype(type(a[0]), int)
True
>>> isinstance(a[0], (int, np.uint))
True
>>> b = np.array([100], dtype=uint64)
>>> 
>>> isinstance(b[0], (int, np.uint))
True

또한 보다 일반적인 접근 방식(일부 특정 유형만 일치시키려는 경우에는 적합하지 않음)으로 사용할 수 있습니다.np.isreal():

>>> np.isreal(a[0])
True
>>> np.isreal(b[0])
True
>>> np.isreal(2.4) # This might not be the result you want
True
>>> np.isreal(2.4j)
False

나무 유형에 대한 멋진 @알렉스 라일리의 답변을 바탕으로 저는 제 값을 이 fn에 매핑하여 같은 문제를 해결할 수 있었습니다.누군가에게 유용하기를 바랍니다.

def convert_to_native_type(value):
    if isinstance(value, np.integer):
        return int(value)
    elif isinstance(value, np.float):
        return float(value)
    else:
        return value

언급URL : https://stackoverflow.com/questions/37726830/how-to-determine-if-a-number-is-any-type-of-int-core-or-numpy-signed-or-not

반응형