ผนวกอาร์เรย์ 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) เอาท์พุท: อาร์เรย์ ([1, 2, 3, 2, 3, 4]) แต่สิ่งที่ฉันกำลังมองหาคืออาร์เรย์ 2d ที่มีจำนวนมาก? ?
frazman

3
@Fraz: ฉันได้เพิ่มvstack()ความคิดของ Sven คุณรู้หรือไม่ว่าคุณสามารถสร้างอาร์เรย์ด้วยarray([[1,2,3],[2,3,4]])ใช่มั้ย
endolith

concatenate () คือสิ่งที่ฉันต้องการ
kakyo

1
numpy.vstackสามารถยอมรับมากกว่า 2 อาร์เรย์ในการโต้แย้งลำดับ ดังนั้นถ้าคุณต้องการรวมมากกว่า 2 อาร์เรย์ 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 จะเป็นอาร์เรย์ 2 มิติ ??
frazman

8
@Fraz: numpy.vstack()มีลักษณะที่
Sven Marnach

ฉันคิดว่านี่ควรเป็นคำตอบที่ได้รับการยอมรับเนื่องจากเป็นคำตอบที่ตรงประเด็น
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

สเวนพูดทุกอย่างให้ระมัดระวังเพราะการปรับเปลี่ยนชนิดอัตโนมัติเมื่อต่อท้ายเรียกว่า

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

ฉันพบลิงค์นี้ในขณะที่กำลังมองหาบางอย่างที่แตกต่างออกไปเล็กน้อยวิธีเริ่มต้นต่อท้ายออบเจกต์อาร์เรย์กับอาร์เรย์ที่ว่างเปล่าแต่ลองใช้วิธีแก้ไขปัญหาทั้งหมดในหน้านี้เพื่อประโยชน์

จากนั้นฉันก็พบคำถามและคำตอบนี้: วิธีเพิ่มแถวใหม่ในอาร์เรย์ที่ว่างเปล่า

ส่วนสำคัญที่นี่:

วิธีการ "เริ่มต้น" อาร์เรย์ที่คุณต้องการคือ:

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

จากนั้นคุณสามารถใช้การต่อข้อมูลเพื่อเพิ่มแถวดังนี้:

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 คำตอบ (ตัวแทนไม่พอพึมพำฉันจำได้ว่าเมื่อ Stackoverflow เริ่มต้นครั้งแรก ... ) ต่อไป

การเพิ่มรายการตัวเลขสุ่มไปยังเมทริกซ์ 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

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

จากนั้นรายการหมายเลขสุ่ม 10 หมายเลขจะถูกสร้างขึ้นโดยใช้ np.random และกำหนดให้กับ 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:]

อาร์เรย์ 7 x 7 โดยใช้ตัวเลขสุ่ม 0 - 1,000

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.