numpy 배열에 항목을 추가하는 방법
다음 작업을 수행해야합니다.
에서:
a = array([[1,3,4],[1,2,3]...[1,2,1]])
(각 행에 하나의 요소 추가) :
a = array([[1,3,4,x],[1,2,3,x]...[1,2,1,x]])
나는 a [n] = array ([1,3,4, x])
그러나 numpy는 모양 불일치에 대해 불평했습니다. 반복 a
하고 각 항목에 요소 x를 추가 하려고 시도 했지만 변경 사항이 반영되지 않았습니다.
이 작업을 수행하는 방법에 대한 아이디어가 있습니까?
기존 배열에 데이터를 추가하는 것은 Python 경험이있는 사람이라면 누구나 할 수있는 자연스러운 일입니다. 그러나 정기적으로 큰 배열에 추가하는 경우 NumPy가 파이썬이하는 방식대로 쉽게 또는 효율적으로이를 수행하지 않는다는 것을 금방 알게 list
될 것입니다. 모든 "추가"작업에는 어레이 메모리를 재 할당하고 메모리 요구 사항을 단기간 두 배로 늘려야합니다. 따라서 문제에 대한보다 일반적인 해결책은 알고리즘의 최종 출력만큼 큰 배열을 할당하는 것입니다. 그런 다음 해당 배열의 하위 집합 ( 슬라이스 ) 에서 모든 작업을 수행합니다 . 어레이 생성 및 파괴는 이상적으로 최소화되어야합니다.
즉, 피할 수없는 경우가 많으며이를 수행하는 기능은 다음과 같습니다.
2 차원 배열의 경우 :
3 차원 배열의 경우 (위의 플러스) :
ND 어레이의 경우 :
import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
b = np.array([10,20,30])
c = np.hstack((a, np.atleast_2d(b).T))
반환 c
:
array([[ 1, 3, 4, 10],
[ 1, 2, 3, 20],
[ 1, 2, 1, 30]])
이를 수행하는 한 가지 방법 (최선이 아닐 수도 있음)은 새 요소로 다른 배열을 만들고 column_stack을 수행하는 것입니다. 즉
>>>a = array([[1,3,4],[1,2,3]...[1,2,1]])
[[1 3 4]
[1 2 3]
[1 2 1]]
>>>b = array([1,2,3])
>>>column_stack((a,b))
array([[1, 3, 4, 1],
[1, 2, 3, 2],
[1, 2, 1, 3]])
단일 스칼라를 추가하는 것은 스칼라를 python-list-type으로 확장하여 이미 표시된대로 (또한 float로 변환하지 않고) 조금 더 쉽게 수행 할 수 있습니다.
import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10
b = np.hstack ((a, [[x]] * len (a) ))
다음 b
과 같이 반환 됩니다.
array([[ 1, 3, 4, 10],
[ 1, 2, 3, 10],
[ 1, 2, 1, 10]])
행 추가는 다음과 같이 수행 할 수 있습니다.
c = np.vstack ((a, [x] * len (a[0]) ))
다음 c
과 같이 반환 됩니다.
array([[ 1, 3, 4],
[ 1, 2, 3],
[ 1, 2, 1],
[10, 10, 10]])
경우 x
단지 하나의 스칼라 값입니다, 당신의 가장 오른쪽에 연결된 추가되고있는 배열 /의 올바른 모양을 보장하기 위해 이런 일을 시도 할 수 있습니다 a
:
import numpy as np
a = np.array([[1,3,4],[1,2,3],[1,2,1]])
x = 10
b = np.hstack((a,x*np.ones((a.shape[0],1))))
다음 b
과 같이 반환 됩니다.
array([[ 1., 3., 4., 10.],
[ 1., 2., 3., 10.],
[ 1., 2., 1., 10.]])
np.insert 는 목적으로 사용할 수도 있습니다.
import numpy as np
a = np.array([[1, 3, 4],
[1, 2, 3],
[1, 2, 1]])
x = 5
index = 3 # the position for x to be inserted before
np.insert(a, index, x, axis=1)
array([[1, 3, 4, 5],
[1, 2, 3, 5],
[1, 2, 1, 5]])
index
list
/ 일 수도 있습니다.tuple
>>> index = [1, 1, 3] # equivalently (1, 1, 3)
>>> np.insert(a, index, x, axis=1)
array([[1, 5, 5, 3, 4, 5],
[1, 5, 5, 2, 3, 5],
[1, 5, 5, 2, 1, 5]])
또는 slice
>>> index = slice(0, 3)
>>> np.insert(a, index, x, axis=1)
array([[5, 1, 5, 3, 5, 4],
[5, 1, 5, 2, 5, 3],
[5, 1, 5, 2, 5, 1]])
target = []
for line in a.tolist():
new_line = line.append(X)
target.append(new_line)
return array(target)
참고 URL : https://stackoverflow.com/questions/5064822/how-to-add-items-into-a-numpy-array
'Program Tip' 카테고리의 다른 글
Python을 사용하여 Windows에서 Unix 줄 끝 문자를 작성하는 방법 (0) | 2020.11.07 |
---|---|
루비 문자열을 날짜로 변환 (0) | 2020.11.07 |
XML로 정의 된 기존 규칙을 프로그래밍 방식으로 제거하려면 어떻게합니까? (0) | 2020.11.07 |
setInterval 타이머를 어떻게 재설정합니까? (0) | 2020.11.07 |
스칼라로 반환 (0) | 2020.11.07 |