NumPy 배열을 NumPy 배열에 추가


179

numpy_array가 있습니다. 같은 것 [ a b c ].

그런 다음 목록 목록을 만드는 것처럼 다른 NumPy 배열에 추가하고 싶습니다. NumPy 배열을 포함하는 NumPy 배열을 어떻게 만들 수 있습니까?

나는 운없이 다음을하려고했습니다.

>>> M = np.array([])
>>> M
array([], dtype=float64)
>>> M.append(a,axis=0)
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'append'
>>> a
array([1, 2, 3])

3
"배열 배열"(객체 배열 사용)을 만들 수 있지만 거의 원하지는 않습니다. 무엇을하려고합니까? 2d 배열을 원하십니까?
Joe Kington

답변:


214
In [1]: import numpy as np

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

In [3]: b = np.array([[9, 8, 7], [6, 5, 4]])

In [4]: np.concatenate((a, b))
Out[4]: 
array([[1, 2, 3],
       [4, 5, 6],
       [9, 8, 7],
       [6, 5, 4]])

아니면 이거:

In [1]: a = np.array([1, 2, 3])

In [2]: b = np.array([4, 5, 6])

In [3]: np.vstack((a, b))
Out[3]: 
array([[1, 2, 3],
       [4, 5, 6]])

1
안녕 내가 이것을 실행할 때이 np.concatenate ((a, b), axis = 1) 출력 : array ([1, 2, 3, 2, 3, 4])하지만 내가 찾는 것은 numpy 2d 배열입니까? ?
frazman

3
@Fraz : Sven의 vstack()아이디어를 추가했습니다 . 으로 배열을 만들 수 있다는 것을 알고 array([[1,2,3],[2,3,4]])있습니까?
endolith

concatenate ()는 내가 필요한 것입니다.
kakyo February

1
numpy.vstacksequence 인수에 3 개 이상의 배열을 사용할 수 있습니다. 따라서 두 개 이상의 어레이를 결합해야하는 경우 vstack이 더 편리합니다.
ruhong

1
@oneleggedmule concatenate은 또한 여러 배열을 취할 수 있습니다
endolith

73

글쎄, 오류 메시지는 모두 말합니다 : NumPy 배열에는 append()메소드 가 없습니다 . numpy.append()그러나 무료 기능이 있습니다 .

numpy.append(M, a)

변경하지 않고 새 배열을 만듭니다 M. 사용하려면 numpy.append()두 배열을 모두 복사해야합니다. 고정 크기 NumPy 배열을 사용하면 코드 성능이 향상됩니다.


안녕하세요 .. 이걸 시도하면 .. >>> np.append (M, a) array ([1., 2., 3.]) >>> np.append (M, b) array ([ 2., 3., 4.]) >>> M array ([], dtype = float64) M을 2D 배열로 바라고 있었습니까?
frazman

8
@Fraz :을보십시오 numpy.vstack().
Sven Marnach 2014 년

나는 이것이 요점에 정확하게 대답하기 때문에 받아 들여진 대답이어야한다고 생각합니다.
Prasad Raghavendra

31

당신은 사용할 수 있습니다 numpy.append()...

import numpy

B = numpy.array([3])
A = numpy.array([1, 2, 2])
B = numpy.append( B , A )

print B

> [3 1 2 2]

이렇게하면 두 개의 개별 배열이 생성되지 않지만 단일 배열에 두 개의 배열이 추가됩니다.


10

Sven은 append가 호출 될 때 자동 유형 조정 때문에 매우 조심해야한다고 말했습니다.

In [2]: import numpy as np

In [3]: a = np.array([1,2,3])

In [4]: b = np.array([1.,2.,3.])

In [5]: c = np.array(['a','b','c'])

In [6]: np.append(a,b)
Out[6]: array([ 1.,  2.,  3.,  1.,  2.,  3.])

In [7]: a.dtype
Out[7]: dtype('int64')

In [8]: np.append(a,c)
Out[8]: 
array(['1', '2', '3', 'a', 'b', 'c'], 
      dtype='|S1')

내용을 기반으로 볼 때 dtype은 int64에서 float32로 이동 한 다음 S1로 이동했습니다.


7

약간 다른 것을 찾고있는 동안이 링크를 찾았습니다. 배열 객체를 numpy 배열에 추가하는 방법은 있지만이 페이지의 모든 솔루션을 사용해보십시오.

그런 다음이 질문과 답변을 찾았 습니다. 빈 numpy 배열에 새 행을 추가하는 방법

요점은 다음과 같습니다.

원하는 배열을 "시작"하는 방법은 다음과 같습니다.

arr = np.empty((0,3), int)

그런 다음 concatenate를 사용하여 다음과 같이 행을 추가 할 수 있습니다.

arr = np.concatenate( ( arr, [[x, y, z]] ) , axis=0)

참조 https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html


4

실제로 항상 numpy 배열의 일반 목록을 작성하고 나중에 변환 할 수 있습니다.

In [1]: import numpy as np

In [2]: a = np.array([[1,2],[3,4]])

In [3]: b = np.array([[1,2],[3,4]])

In [4]: l = [a]

In [5]: l.append(b)

In [6]: l = np.array(l)

In [7]: l.shape
Out[7]: (2, 2, 2)

In [8]: l
Out[8]: 
array([[[1, 2],
        [3, 4]],

       [[1, 2],
        [3, 4]]])

2

나는 똑같은 문제를 겪었고 @Sven Marnach 답변에 대해 언급 할 수 없었습니다 (충분한 담당자가 아닙니다.

10 X 10 행렬에 난수 목록 추가

myNpArray = np.zeros([1, 10])
for x in range(1,11,1):
    randomList = [list(np.random.randint(99, size=10))]
    myNpArray = np.vstack((myNpArray, randomList))
myNpArray = myNpArray[1:]

np.zeros ()를 사용하면 1 x 10 개의 0으로 배열이 만들어집니다.

array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

그런 다음 np.random을 사용하여 10 개의 난수 목록을 생성하고 randomList에 할당합니다. 루프는 10을 쌓습니다. 비어있는 첫 번째 항목을 제거해야합니다.

myNpArray

array([[31., 10., 19., 78., 95., 58.,  3., 47., 30., 56.],
       [51., 97.,  5., 80., 28., 76., 92., 50., 22., 93.],
       [64., 79.,  7., 12., 68., 13., 59., 96., 32., 34.],
       [44., 22., 46., 56., 73., 42., 62.,  4., 62., 83.],
       [91., 28., 54., 69., 60., 95.,  5., 13., 60., 88.],
       [71., 90., 76., 53., 13., 53., 31.,  3., 96., 57.],
       [33., 87., 81.,  7., 53., 46.,  5.,  8., 20., 71.],
       [46., 71., 14., 66., 68., 65., 68., 32.,  9., 30.],
       [ 1., 35., 96., 92., 72., 52., 88., 86., 94., 88.],
       [13., 36., 43., 45., 90., 17., 38.,  1., 41., 33.]])

따라서 함수에서 :

def array_matrix(random_range, array_size):
    myNpArray = np.zeros([1, array_size])
    for x in range(1, array_size + 1, 1):
        randomList = [list(np.random.randint(random_range, size=array_size))]
        myNpArray = np.vstack((myNpArray, randomList))
    return myNpArray[1:]

난수 0-1000을 사용하는 7 x 7 배열

array_matrix(1000, 7)

array([[621., 377., 931., 180., 964., 885., 723.],
       [298., 382., 148., 952., 430., 333., 956.],
       [398., 596., 732., 422., 656., 348., 470.],
       [735., 251., 314., 182., 966., 261., 523.],
       [373., 616., 389.,  90., 884., 957., 826.],
       [587., 963.,  66., 154., 111., 529., 945.],
       [950., 413., 539., 860., 634., 195., 915.]])

1

귀하의 질문을 이해하면 한 가지 방법이 있습니다. 당신이 가지고 있다고 :

a = [4.1, 6.21, 1.0]

여기 코드가 있습니다 ...

def array_in_array(scalarlist):
    return [(x,) for x in scalarlist]

어느 것이

In [72]: a = [4.1, 6.21, 1.0]

In [73]: a
Out[73]: [4.1, 6.21, 1.0]

In [74]: def array_in_array(scalarlist):
   ....:     return [(x,) for x in scalarlist]
   ....: 

In [75]: b = array_in_array(a)

In [76]: b
Out[76]: [(4.1,), (6.21,), (1.0,)]

0

이 코드를 사용해보십시오 :

import numpy as np

a1 = np.array([])

n = int(input(""))

for i in range(0,n):
    a = int(input(""))
    a1 = np.append(a, a1)
    a = 0

print(a1)

또한 "a"대신 배열을 사용할 수 있습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.