Program Tip

numpy 배열에 항목을 추가하는 방법

programtip 2020. 11. 7. 10:25
반응형

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]])

indexlist/ 일 수도 있습니다.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

반응형