[python] numpy 배열을 초기화

모양의 numpy 배열을 초기화하고 추가하는 방법이 있습니까? 리스트 예제로 필요한 것을 설명하겠습니다. 루프에서 생성 된 객체 목록을 만들려면 다음을 수행하십시오.

a = []
for i in range(5):
    a.append(i)

numpy 배열과 비슷한 것을하고 싶습니다. vstack, concatenate 등에 대해 알고 있지만 입력으로 두 개의 numpy 배열이 필요한 것 같습니다. 내가 필요한 것은 :

big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
    array i of shape = (2,4) created.
    add to big_array

big_array모양 이 있어야합니다 (10,4). 이것을하는 방법?


편집하다:

다음 설명을 추가하고 싶습니다. 나는 big_array = numpy.zeros((10,4))그것을 정의 하고 채울 수 있다는 것을 알고 있습니다 . 그러나 big_array의 크기를 미리 지정해야합니다. 이 경우 크기를 알고 있지만, 그렇지 않으면 어떻게합니까? .append파이썬에서 목록을 확장 하는 함수를 사용할 때 최종 크기를 미리 알 필요는 없습니다. 빈 배열로 시작하여 작은 배열에서 더 큰 배열을 만들 때 비슷한 것이 있는지 궁금합니다.



답변

numpy.zeros

0으로 채워진 지정된 모양과 유형의 새 배열을 반환합니다.

또는

numpy.ones

주어진 모양과 유형으로 채워진 새로운 배열을 반환합니다.

또는

numpy.empty

항목을 초기화하지 않고 지정된 모양과 유형의 새 배열을 반환합니다.


그러나 요소를 목록에 추가하여 배열을 구성하는 방식은 numpy에서 많이 사용되지 않습니다. 대신 필요한 크기로 배열을 미리 할당 한 다음 행을 채워야합니다. numpy.append그래도 필요한 경우 사용할 수 있습니다 .


답변

내가 일반적으로하는 방법은 일반 목록을 만든 다음 내 물건을 추가하고 다음과 같이 목록을 numpy 배열로 변환하는 것입니다.

import numpy as np
big_array = [] #  empty regular list
for i in range(5):
    arr = i*np.ones((2,4)) # for instance
    big_array.append(arr)
big_np_array = np.array(big_array)  # transformed to a numpy array

물론 최종 객체는 생성 단계에서 메모리 공간의 두 배를 차지하지만 파이썬 목록에 추가하는 것은 매우 빠르며 np.array ()를 사용하여 생성하는 것도 가능합니다.


답변

numpy 1.8에 도입 :

numpy.full

fill_value로 채워진 지정된 모양과 유형의 새 배열을 반환합니다.

예 :

>>> import numpy as np
>>> np.full((2, 2), np.inf)
array([[ inf,  inf],
       [ inf,  inf]])
>>> np.full((2, 2), 10)
array([[10, 10],
       [10, 10]])


답변

파이썬의 배열 아날로그

a = []
for i in range(5):
    a.append(i)

입니다 :

import numpy as np

a = np.empty((0))
for i in range(5):
    a = np.append(a, i)


답변

numpy.fromiter() 당신이 찾고있는 것입니다 :

big_array = numpy.fromiter(xrange(5), dtype="int")

또한 다음과 같은 생성기 표현식에서도 작동합니다.

big_array = numpy.fromiter( (i*(i+1)/2 for i in xrange(5)), dtype="int" )

미리 배열의 길이를 알고 있다면 선택적인 ‘count’인수로 지정할 수 있습니다.


답변

어레이 컴퓨팅을 수행 할 때 가능한 한 명시적인 루프를 피하고 싶기 때문에 해당 컴퓨팅 형식의 속도 이득이 줄어 듭니다. numpy 배열을 초기화하는 방법에는 여러 가지가 있습니다. 0으로 채워지려면 katrielalex가 말한 것처럼하십시오.

big_array = numpy.zeros((10,4))

편집 : 어떤 종류의 시퀀스를 만들고 있습니까? numpy.linspace(start, stop, size)( 같은 간격의 숫자) 또는와 같은 배열을 만드는 다른 numpy 함수를 확인해야합니다 numpy.arange(start, stop, inc). 가능한 경우 이러한 함수는 명시 적 루프에서 동일한 작업을 수행하는 것보다 훨씬 빠른 속도로 배열을 만듭니다.


답변

첫 번째 배열 예를 사용하려면

a = numpy.arange(5)

big_array를 초기화하려면 다음을 사용하십시오.

big_array = numpy.zeros((10,4))

이것은 0으로 초기화한다고 가정합니다. 이것은 꽤 일반적이지만 numpy에서 배열을 초기화하는 다른 많은 방법이 있습니다 .

편집 :
미리 big_array의 크기를 모르는 경우 일반적으로 append를 사용하여 Python 목록을 작성하는 것이 가장 좋으며 목록에 모든 항목이 수집되면을 사용 하여이 목록을 numpy 배열로 변환하십시오 numpy.array(mylist). 그 이유는 목록이 매우 효율적이고 빠르게 성장하는 반면 numpy.concatenate는 numpy 배열의 크기가 쉽게 변경되지 않기 때문에 매우 비효율적입니다. 그러나 모든 것이 목록에 수집되고 최종 배열 크기를 알면 numpy 배열을 효율적으로 만들 수 있습니다.