source

Numpy - 배열에 행 추가

factcode 2022. 9. 17. 09:46
반응형

Numpy - 배열에 행 추가

numpy 어레이에 행을 추가하려면 어떻게 해야 합니까?

어레이 A:

A = array([[0, 1, 2], [0, 2, 0]])

X의 각 행의 첫 번째 요소가 특정 조건을 충족하면 다른 배열 X에서 이 배열에 행을 추가하고 싶습니다.

Numpy 배열에는 목록과 같은 '추가' 메서드가 없습니다.

A와 X가 리스트라면, 다음의 조작을 실시합니다.

for i in X:
    if i[0] < 3:
        A.append(i)

같은 것을 할 수 있는 숫자 피톤적인 방법이 있나요?

고마워, S;-)

다음과 같이 할 수 있습니다.

newrow = [1, 2, 3]
A = numpy.vstack([A, newrow])

뭐가X2D 어레이일 경우 행을 숫자와 비교할 수 있는 방법은 무엇입니까?i < 3?

OP 코멘트 후 편집:

A = array([[0, 1, 2], [0, 2, 0]])
X = array([[0, 1, 2], [1, 2, 0], [2, 1, 2], [3, 2, 0]])

에 추가하다.A에서 모든 행X첫 번째 요소는< 3:

import numpy as np
A = np.vstack((A, X[X[:,0] < 3]))

# returns: 
array([[0, 1, 2],
       [0, 2, 0],
       [0, 1, 2],
       [1, 2, 0],
       [2, 1, 2]])

이 질문은 7년 전이기 때문에 제가 사용하고 있는 최신 버전은 numpy 버전 1.13이고 python3에서는 행렬에 행을 추가하는 것과 같은 작업을 하고 있습니다.두 번째 인수에 이중 괄호를 붙이면 치수 오류가 발생합니다.

여기서 행렬 A를 더합니다.

1 2 3
4 5 6

노를 저어

7 8 9

에서의 같은 용법np.r_

A = [[1, 2, 3], [4, 5, 6]]
np.append(A, [[7, 8, 9]], axis=0)

    >> array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
#or 
np.r_[A,[[7,8,9]]]

관심 있는 사람에게만 말씀드리자면, 칼럼을 추가하고 싶다면

array = np.c_[A,np.zeros(#A's row size)]

행렬 A에서 이전에 수행한 작업을 따라 여기에 열을 추가합니다.

np.c_[A, [2,8]]

>> array([[1, 2, 3, 2],
          [4, 5, 6, 8]])

선두에 붙이려면 인수 순서를 바꾸면 됩니다.

np.r_([[7, 8, 9]], A)

    >> array([[7, 8, 9],
             [1, 2, 3],
             [4, 5, 6]])

각 행 뒤에 계산이 필요하지 않은 경우 python에서 행을 추가한 다음 numpy로 변환하는 것이 훨씬 빠릅니다.다음은 python 3.6 대 numpy 1.14를 사용한 타이밍 테스트입니다.한 번에 100개의 행을 추가합니다.

import numpy as np 
from time import perf_counter, sleep

def time_it():
    # Compare performance of two methods for adding rows to numpy array
    py_array = [[0, 1, 2], [0, 2, 0]]
    py_row = [4, 5, 6]
    numpy_array = np.array(py_array)
    numpy_row = np.array([4,5,6])
    n_loops = 100

    start_clock = perf_counter()
    for count in range(0, n_loops):
       numpy_array = np.vstack([numpy_array, numpy_row]) # 5.8 micros
    duration = perf_counter() - start_clock
    print('numpy 1.14 takes {:.3f} micros per row'.format(duration * 1e6 / n_loops))

    start_clock = perf_counter()
    for count in range(0, n_loops):
        py_array.append(py_row) # .15 micros
    numpy_array = np.array(py_array) # 43.9 micros       
    duration = perf_counter() - start_clock
    print('python 3.6 takes {:.3f} micros per row'.format(duration * 1e6 / n_loops))
    sleep(15)

#time_it() prints:

numpy 1.14 takes 5.971 micros per row
python 3.6 takes 0.694 micros per row

따라서 7년 전의 질문에 대한 간단한 해결책은 행을 numpy 배열로 변환한 후 vstack()을 사용하여 새 행을 추가하는 것입니다.그러나 보다 현실적인 솔루션은 이러한 상황에서 vstack의 성능 저하를 고려해야 합니다.추가할 때마다 어레이에서 데이터 분석을 실행할 필요가 없는 경우 데이터 분석을 수행하기 전에 새 행을 python 행 목록(실제로 목록)에 버퍼링하고 vstack()을 사용하여 numpy 배열에 그룹으로 추가하는 것이 좋습니다.

다음 작업도 수행할 수 있습니다.

newrow = [1,2,3]
A = numpy.concatenate((A,newrow))
import numpy as np
array_ = np.array([[1,2,3]])
add_row = np.array([[4,5,6]])

array_ = np.concatenate((array_, add_row), axis=0)

더 빠른 'np.vstack'을 사용합니다.

import numpy as np

input_array=np.array([1,2,3])
new_row= np.array([4,5,6])

new_array=np.vstack([input_array, new_row])

사용하고 있다numpy.insert(arr, i, the_object_to_be_added, axis)삽입하기 위해object_to_be_added첫 번째 줄에(axis=0)또는 컬럼(axis=1)

import numpy as np

a = np.array([[1, 2, 3], [5, 4, 6]])
# array([[1, 2, 3],
#        [5, 4, 6]])

np.insert(a, 1, [55, 66], axis=1)
# array([[ 1, 55,  2,  3],
#        [ 5, 66,  4,  6]])

np.insert(a, 2, [50, 60, 70], axis=0)
# array([[ 1,  2,  3],
#        [ 5,  4,  6],
#        [50, 60, 70]])

너무 오래된 논의지만 도움이 됐으면 좋겠어요.

단일 작업으로 구축을 수행할 수 있다면 vstack-with-fancy-indexing 답변과 같은 방법이 좋습니다.그러나 상황이 더 복잡하거나 행이 바로 들어오는 경우에는 어레이를 확장할 수 있습니다.실제로 어레이를 동적으로 확장하는 다음과 같은 수식적인 방법은 목록을 동적으로 늘리는 것입니다.

A = np.array([[1,2,3],[4,5,6]])
Alist = [r for r in A]
for i in range(100):
    newrow = np.arange(3)+i
    if i%5:
        Alist.append(newrow)
A = np.array(Alist)
del Alist

리스트는 이런 종류의 액세스 패턴에 매우 최적화되어 있습니다.목록 형식에서는 편리한 다차원 인덱싱을 할 수 없습니다.다차원 인덱싱을 추가하는 한 행 배열 목록보다 더 나은 작업을 수행하는 것은 어렵습니다.

하시면 됩니다.numpy.append(). numpty 배열은 numpty 배열로 이동합니다.

import numpy as np
a = np.array([1,2])
a = np.append(a, [3,4])
print a
# [1,2,3,4]
# in your example
A = [1,2]
for row in X:
    A = np.append(A, row)

언급URL : https://stackoverflow.com/questions/3881453/numpy-add-row-to-array

반응형