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
파이썬에서 목록을 확장하기 위한 기능, 우리는 그것의 최종 크기를 미리 알 필요가 없습니다.저는 빈 배열로 시작하여 더 작은 배열로 더 큰 배열을 만드는 것과 비슷한 것이 있는지 궁금합니다.
0으로 채워진 지정된 모양 및 유형의 새 배열을 반환합니다.
또는
지정된 모양 및 유형의 새 배열을 반환합니다. 이 배열은 모양과 유형으로 채웁니다.
또는
항목을 초기화하지 않고 지정된 모양 및 유형의 새 배열을 반환합니다.
그러나 목록에 요소를 추가하여 배열을 구성하는 사고방식은 효율성이 떨어지기 때문에 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에 소개됨:
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
인덱스된 할당을 사용하여 행을 채웁니다.
로 사전 할당하는 것은 완벽하게 안전합니다.empty
에 zeros
사용자가 생성한 청크로 전체 어레이가 채워질 것을 보장하기 때문에 제공한 예제에서 사용할 수 있습니다.
저는 먼저 모양을 정의하는 것을 제안합니다.그런 다음 값을 삽입하기 위해 반복합니다.
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
'source' 카테고리의 다른 글
두 오라클 인스턴스 간에 DB 링크를 만드는 방법 (0) | 2023.06.15 |
---|---|
는 HttpContent입니다.Async로 읽으시겠습니까? (0) | 2023.06.15 |
Nodejs vs SignalR: 서버 측 Javascript가 필요한 이유는 무엇입니까? (0) | 2023.06.15 |
Django 사용자 지정 양식 매개 변수를 양식 세트로 전달 (0) | 2023.06.15 |
이 MySQL/MariaDB 구문은 무엇입니까? (0) | 2023.06.10 |