numpy에서 ndarray와 array의 차이점은 무엇입니까?


답변:


220

numpy.array그냥 만드는 편리한 함수입니다 ndarray; 그것은 클래스 자체가 아닙니다.

을 사용하여 배열을 만들 수도 numpy.ndarray있지만 권장되는 방법은 아닙니다. 의 docstring에서 numpy.ndarray:

배열은 array, zeros또는 empty...를 사용하여 구성해야합니다. 여기에 제공된 매개 변수 ndarray(...)는 배열 인스턴스화를위한 저수준 방법 ( )을 나타냅니다.

구현의 대부분은 C 코드에 있으며 여기 multiarray 이지만 ndarray 인터페이스를 살펴볼 수 있습니다.

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
array ()이 array_getarray ()의 core / src / multiarray / methods.c 에 구현되어 있다고 생각 합니다.
flxb

6
np.array내가 자주하는 것처럼 수업이 아니라는 것을 잊어 버린 경우 물릴 수 있습니다 . x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L

4
왜 Ndarray를 사용하지 않아야하는지에 대한 단서가 여전히 없습니까? Coz는 저수준입니까?
GabrielChu

@flxb : 아니요 . array_getarray의 구현입니다 numpy.ndarray.__array__. 적어도 현재 구현에서는에서 numpy.array시작합니다 _array_fromobject.
user2357112는 Monica

2
왜 권장하지 않습니까?
NONAME


31

numpy.array와 numpy.ndarray의 차이점을 보여주는 예제 코드 몇 줄

예열 단계 : 목록 구성

a = [1,2,3]

타입 확인

print(type(a))

당신은 얻을 것이다

<class 'list'>

np.array를 사용하여 목록에서 배열 생성

a = np.array(a)

또는 예열 단계를 건너 뛸 수 있습니다.

a = np.array([1,2,3])

타입 확인

print(type(a))

당신은 얻을 것이다

<class 'numpy.ndarray'>

numpy 배열의 유형이 numpy.ndarray임을 알려줍니다.

유형을 확인할 수도 있습니다

isinstance(a, (np.ndarray))

그리고 당신은 얻을 것이다

True

다음 두 줄 중 하나에 오류 메시지가 나타납니다.

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()클래스이며, numpy.array()작성하는 메소드 / 함수 ndarray입니다.

numpy 문서에서 ndarray클래스 에서 배열을 만들려면 인용 된대로 두 가지 방법으로 할 수 있습니다.

1- 사용 array(), zeros()또는 empty()방법 : 배열 어레이 0을 사용하거나 비어 생성한다 (또한 참조 아래 부분 참조). 여기에 제공된 매개 변수 ndarray(…)는 배열 인스턴스화를위한 저수준 방법 ( )을 나타냅니다.

2- ndarray클래스에서 직접 : 두 가지 모드를 사용하여 배열을 만듭니다__new__ buffer가 None이면 shape, dtype 및 order 만 사용됩니다. buffer가 버퍼 인터페이스를 노출하는 객체 인 경우 모든 키워드가 해석됩니다.

아래 예제는 버퍼 값을 할당하지 않았기 때문에 임의의 배열을 제공합니다.

np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None)

array([[ -1.13698227e+002,   4.25087011e-303],
       [  2.88528414e-306,   3.27025015e-309]])         #random

또 다른 예는 버퍼 객체에 배열 객체를 할당하는 것입니다.

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

위 예제에서 우리는 "buffer"에리스트를 할당 할 수없고 버퍼에 대한 ndarray 객체를 반환하기 위해 numpy.array ()를 사용해야한다는 것을 알 수 있습니다.

결론 : numpy.array()당신이 numpy.ndarray()물건 을 만들고 싶다면 사용 "


0

나는 np.array()당신이 np.isfortran()그것을 언급 할 때 C를 만들 수 있다고 생각 합니다 . 그러나 np.ndarrray()주문을 지정하면 제공된 주문을 기반으로 생성됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.