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 |