빈 어레이를 생성하여 NumPy에 추가하는 방법은 무엇입니까?
빈 배열을 만들고 항목을 하나씩 추가합니다.
xs = []
for item in data:
xs.append(item)
NumPy 배열에서 이 목록 형식의 표기법을 사용할 수 있습니까?
그것은 NumPy를 효율적으로 사용하기 위한 잘못된 정신 모델이다.NumPy 어레이는 연속된 메모리 블록에 저장됩니다.행 또는 열을 기존 배열에 추가하려면 전체 어레이를 새 메모리 블록에 복사하여 새 요소를 저장할 공간을 만들어야 합니다.이것은 반복하면 매우 비효율적입니다.
행을 추가하는 대신 적절한 크기의 어레이를 할당한 다음 행별로 할당합니다.
>>> import numpy as np
>>> a = np.zeros(shape=(3, 2))
>>> a
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
>>> a[0] = [1, 2]
>>> a[1] = [3, 4]
>>> a[2] = [5, 6]
>>> a
array([[ 1., 2.],
[ 3., 4.],
[ 5., 6.]])
NumPy 배열은 목록과 매우 다른 데이터 구조이며 다른 방식으로 사용하도록 설계되었습니다.사용방법hstack
매우 비효율적일 수 있습니다.호출할 때마다 기존 어레이의 모든 데이터가 새 어레이로 복사됩니다.append
함수에 같은 문제가 발생합니다.)행렬을 한 번에 한 열씩 빌드하려면 행렬이 완료될 때까지 목록에 보관한 다음 배열로 변환하는 것이 가장 좋습니다.
예.
mylist = []
for item in data:
mylist.append(item)
mat = numpy.array(mylist)
item
목록, 배열 또는 반복 가능한 모든 것이 될 수 있습니다.item
에는 같은 수의 요소가 있습니다.
이 경우는 (data
매트릭스 열을 유지하는 반복 가능한 기능)을 간단히 사용할 수 있습니다.
mat = numpy.array(data)
(또한,list
변수명은, 그 이름으로 삽입 타입을 마스크 해 버그를 일으킬 가능성이 있기 때문에, 좋은 프랙티스는 아닐지도 모릅니다).
편집:
어떤 이유로든 빈 어레이를 만들고 싶다면 numpy.array([])
하지만 이것은 거의 쓸모가 없다!
NumPy에 빈 다차원 배열(예: 2D 배열)을 작성하려면m*n
매트릭스를 저장하기 위해)m
Stephen Simmons가 언급한 계산 비용(즉, 각 추가에서 어레이 재구축)에 관계없이 추가할 차원을 0으로 압축할 수 있습니다.X = np.empty(shape=[0, n])
.
예를 들어 다음과 같이 사용할 수 있습니다(여기서).m = 5
빈 매트릭스를 만들 때 몰랐다고 가정합니다.n = 2
):
import numpy as np
n = 2
X = np.empty(shape=[0, n])
for i in range(5):
for j in range(2):
X = np.append(X, [[i, j]], axis=0)
print X
다음과 같은 이점을 얻을 수 있습니다.
[[ 0. 0.]
[ 0. 1.]
[ 1. 0.]
[ 1. 1.]
[ 2. 0.]
[ 2. 1.]
[ 3. 0.]
[ 3. 1.]
[ 4. 0.]
[ 4. 1.]]
학교 프로젝트 중 하나로 numpy.array를 세트로 사용해야 하고 빈 상태로 초기화해야 했기 때문에 많이 알아봤습니다.Stack Overflow에 관련된 답을 찾지 못했기 때문에 뭔가를 낙서하기 시작했습니다.
# Initialize your variable as an empty list first
In [32]: x=[]
# and now cast it as a numpy ndarray
In [33]: x=np.array(x)
결과는 다음과 같습니다.
In [34]: x
Out[34]: array([], dtype=float64)
따라서 다음과 같이 np 배열을 직접 초기화할 수 있습니다.
In [36]: x= np.array([], dtype=np.float64)
이게 도움이 됐으면 좋겠어요.
쉐이프를 정의하지 않고 빈 NumPy 어레이를 작성하려면 다음을 수행하십시오.
arr = np.array([])
첫 번째 것은 NumPy 어레이로 사용하는 것을 알고 있기 때문에 권장됩니다.을 NumPy로 합니다.np.ndarray
[]
" " "
어레이에 새로운 요소를 추가하기 위해 다음을 수행할 수 있습니다.
arr = np.append(arr, 'new element')
python의 배경에는 모양을 정의하지 않은 배열은 없습니다.@hpaulj가 언급했듯이, 이것은 1랭크 어레이도 만듭니다.
추가 기능을 사용할 수 있습니다.행의 경우:
>>> from numpy import *
>>> a = array([10,20,30])
>>> append(a, [[1,2,3]], axis=0)
array([[10, 20, 30],
[1, 2, 3]])
열의 경우:
>>> append(a, [[15],[15]], axis=1)
array([[10, 20, 30, 15],
[1, 2, 3, 15]])
★★★★
물론 다른 답변에서도 언급했듯이 매트릭스/어레이에 대해 일부 처리(반전 등)를 수행하지 않는 한 어떤 항목을 추가할 때마다 목록을 작성하고 추가한 후 어레이로 변환합니다.
다음은 숫자를 목록처럼 보이게 하기 위한 몇 가지 해결 방법입니다.
np_arr = np.array([])
np_arr = np.append(np_arr , 2)
np_arr = np.append(np_arr , 24)
print(np_arr)
출력: 어레이([ 2. , 24 . ] )
어레이의 최종 사이즈를 전혀 모르는 경우는, 다음과 같이 어레이의 사이즈를 늘릴 수 있습니다.
my_arr = numpy.zeros((0,5))
for i in range(3):
my_arr=numpy.concatenate( ( my_arr, numpy.ones((1,5)) ) )
print(my_arr)
[[ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.]]
- 점에 주의:
0
맨 앞줄에 numpy.append
또 다른 옵션입니다.출출 it it it라고 .numpy.concatenate
.
0과 같은 모든 종류의 어레이 구축에 적용할 수 있습니다.
a = range(5)
a = [i*0 for i in a]
print a
[0, 0, 0, 0, 0]
사용 목적에 따라 데이터 유형을 지정해야 할 수도 있습니다('dtype' 참조).
예를 들어, 8비트 값의 2D 배열을 만들려면(단색 이미지로 사용하기에 적합) 다음과 같이 하십시오.
myarray = numpy.empty(shape=(H,W),dtype='u1')
RGB 이미지의 경우 모양에 색상 채널 수를 포함합니다.shape=(H,W,3)
0의 도 고려해 볼 수 .numpy.zeros
''를 사용하는 대신.numpy.empty
. 여기를 참고하세요.
어레이를 사용할 수 있는 빈 어레이를 작성하는 또 다른 간단한 방법은 다음과 같습니다.
import numpy as np
np.empty((2,3), dtype=object)
대부분의 작업을 목록으로 처리하고 그 결과를 매트릭스로 사용하길 원하는 것 같습니다.어쩌면 이게 방법일지도 몰라.
ur_list = []
for col in columns:
ur_list.append(list(col))
mat = np.matrix(ur_list)
다음과 같은 빈 numpy 배열을 생성할 수 있습니다.
>>> import numpy as np
>>> empty_array= np.zeros(0)
>>> empty_array
array([], dtype=float64)
>>> empty_array.shape
(0,)
이 형식은 numpy 배열을 루프에 추가할 때 유용합니다.
아마 다음과 같은 것을 찾고 있을 것입니다.
x=np.array(0)
이 방법으로 요소 없이 배열을 만들 수 있습니다.다음과 같습니다.
x=[]
이렇게 하면 어레이에 새로운 요소를 미리 추가할 수 있습니다.
가장 간단한 방법
입력:
import numpy as np
data = np.zeros((0, 0), dtype=float) # (rows,cols)
data.shape
★★★★★
(0, 0)
입력:
for i in range(n_files):
data = np.append(data, new_data, axis = 0)
언급URL : https://stackoverflow.com/questions/568962/how-do-i-create-an-empty-array-and-then-append-to-it-in-numpy
'programing' 카테고리의 다른 글
인덱스된 키에 가입하더라도 MySQL(InnoDB) 쿼리가 느립니다. 이유는 무엇입니까? (0) | 2023.01.25 |
---|---|
오류: (23, 17) 해결 실패: junit: junit: 4.12 (0) | 2023.01.25 |
부모 클래스의 자식 클래스 이름 가져오기(정적 컨텍스트) (0) | 2023.01.15 |
jQuery가 비동기 Ajax 요청이 아닌 동기 Ajax 요청을 수행하도록 하려면 어떻게 해야 합니까? (0) | 2023.01.15 |
두 개체를 자세히 비교할 수 있는 Java 유틸리티가 있습니까? (0) | 2023.01.15 |