source

numpy 배열 초기화

manycodes 2023. 6. 15. 21:57
반응형

numpy 배열 초기화

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

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

저는 numpy 배열과 비슷한 것을 하고 싶습니다.vstack, concontate 등에 대해 알고 있습니다.그러나 입력으로 두 개의 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 데이터 유형은 기본 C 배열에 훨씬 더 가깝습니다).대신 필요한 크기로 어레이를 미리 할당한 다음 행을 채워야 합니다.사용할 수 있습니다.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 배열을 초기화하는 방법은 여러 가지가 있습니다.0으로 채우려면 katrielalex가 말한 대로 합니다.

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

편집: 어떤 종류의 시퀀스를 만들고 있습니까?당신배만드다는른수함합확니다인야해을들과 같이 여러 .numpy.linspace(start, stop, size)으로 된 ), 또는 (으)로 된 숫자, 또numpy.arange(start, stop, inc) 함수는 명시적 입니다.

특정 행렬을 사용하여 numpy 배열을 초기화하는 방법

import numpy as np

mat = np.array([[1, 1, 0, 0, 0],
                [0, 1, 0, 0, 1],
                [1, 0, 0, 1, 1],
                [0, 0, 0, 0, 0],
                [1, 0, 1, 0, 1]])

print mat.shape
print mat

출력:

(5, 5)
[[1 1 0 0 0]
 [0 1 0 0 1]
 [1 0 0 1 1]
 [0 0 0 0 0]
 [1 0 1 0 1]]

첫 번째 어레이 예제에서는 다음을 사용합니다.

a = numpy.arange(5)

big_array를 초기화하려면 다음을 사용합니다.

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

여기에서는 일반적으로 0으로 초기화하려고 하지만 numpy로 배열을 초기화하는 방법은 여러 가지가 있습니다.

편집: big_array의 크기를 미리 알지 못한다면, 일반적으로 먼저 append를 사용하여 Python 목록을 작성하고 목록에 모든 것이 수집되면 다음을 사용하여 이 목록을 numpy 배열로 변환하는 것이 가장 좋습니다.numpy.array(mylist)그 이유는 목록이 매우 효율적이고 빠르게 증가하는 반면 numpy.concontate는 numpy 배열의 크기가 쉽게 변경되지 않기 때문에 매우 비효율적이기 때문입니다.그러나 목록에 모든 정보가 수집되고 최종 배열 크기를 알면 numpy 배열을 효율적으로 구성할 수 있습니다.

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' 인수를 사용하여 배열을 지정할 수 있습니다.

조금 늦었다는 것은 알지만 빈 배열로 인덱싱하는 것에 대해 언급하는 다른 답변은 전혀 몰랐습니다.

big_array = numpy.empty(10, 4)
for i in range(5):
    array_i = numpy.random.random(2, 4)
    big_array[2 * i:2 * (i + 1), :] = array_i

전체 을 미리 할 수 있습니다.numpy.empty인덱스된 할당을 사용하여 행을 채웁니다.

로 사전 할당하는 것은 완벽하게 안전합니다.emptyzeros사용자가 생성한 청크로 전체 어레이가 채워질 것을 보장하기 때문에 제공한 예제에서 사용할 수 있습니다.

저는 먼저 모양을 정의하는 것을 제안합니다.그런 다음 값을 삽입하기 위해 반복합니다.

big_array= np.zeros(shape = ( 6, 2 ))
for it in range(6):
    big_array[it] = (it,it) # For example

>>>big_array

array([[ 0.,  0.],
       [ 1.,  1.],
       [ 2.,  2.],
       [ 3.,  3.],
       [ 4.,  4.],
       [ 5.,  5.]])

다음과 같은 상황이 발생할 때마다:

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

그리고 당신은 numpy와 유사한 것을 원하지만, @nabrielalex가 지적했듯이, 몇몇 이전의 대답들은 그것을 하는 방법들을 지적했습니다.이렇게 하는 효율적인 방법은 긴 목록을 작성한 다음 긴 목록이 있는 후 원하는 방식으로 재구성하는 것입니다.예를 들어, 파일에서 몇 개의 행을 읽고 있는데 각 행에 숫자 목록이 있고 numpy 모양 배열(읽은 행 수, 각 행의 벡터 길이)을 작성하려고 합니다.보다 효율적인 방법은 다음과 같습니다.

long_list = []
counter = 0
with open('filename', 'r') as f:
    for row in f:
        row_list = row.split()
        long_list.extend(row_list)
        counter++
#  now we have a long list and we are ready to reshape
result = np.array(long_list).reshape(counter, len(row_list)) #  desired numpy array

아마도 이런 것이 당신의 필요에 맞을 것입니다.

import numpy as np

N = 5
res = []

for i in range(N):
    res.append(np.cumsum(np.ones(shape=(2,4))))

res = np.array(res).reshape((10, 4))
print(res)

다음과 같은 출력을 생성합니다.

[[ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]
 [ 1.  2.  3.  4.]
 [ 5.  6.  7.  8.]]

다차원 배열로 항목을 추가하려면 다음 솔루션을 사용합니다.

import numpy as np
big_array = np.ndarray(shape=(0, 2, 4) # Empty with height and width 2, 4 and length 0

for i in range(5):
    big_array = np.concatenate((big_array, i))

여기 참조를 위한 numpy 공식 문서입니다.

# https://thispointer.com/create-an-empty-2d-numpy-array-matrix-and-append-rows-or-columns-in-python/

# Create an empty Numpy array with 4 columns or 0 rows
empty_array = np.empty((0, 4), int)

# Append a row to the 2D numpy array
empty_array = np.append(empty_array, np.array([[11, 21, 31, 41]]), axis=0)
# Append 2nd rows to the 2D Numpy array
empty_array = np.append(empty_array, np.array([[15, 25, 35, 45]]), axis=0)
print('2D Numpy array:')
print(empty_array)

입력된 각 np.array가 2차원이라는 점에 유의합니다.

언급URL : https://stackoverflow.com/questions/4535374/initialize-a-numpy-array

반응형