2011-09-07 43 views
46

Tôi có một mảng NumPy chứa:Thêm yếu tố duy nhất để mảng trong NumPy

[1, 2, 3] 

Tôi muốn tạo ra một mảng chứa:

[1, 2, 3, 1] 

Đó là, tôi muốn thêm vào phần tử đầu tiên trên đến cuối mảng.

Tôi đã cố gắng rõ ràng:

np.concatenate((a, a[0])) 

Nhưng tôi nhận được một lỗi nói ValueError: arrays must have same number of dimensions

Tôi không hiểu điều này - các mảng đều mảng chỉ 1d.

+0

'np.insert ([1,2,3], 3, 1)' – Sparkler

+2

Ngoại trừ câu trả lời được chấp nhận, các câu trả lời khác khá là lập dị. –

Trả lời

74

Tôi nghĩ đó là bình thường hơn để sử dụng các phương pháp thích hợp để thêm một yếu tố:

numpy.append(a, a[0]) 
+0

Bạn đang đúng về 'append' (và có +1 của tôi), nhưng tôi nghĩ rằng' concatenate' được cho là phải lấy một mảng các mảng, theo [this] (http://docs.scipy.org/doc/ Ví dụ: numpy/reference/generated/numpy.concatenate.html) và [this] (http://www.scipy.org/Numpy_Example_List#concatenate). – DMA57361

+0

opps, bạn đúng :) (như có một dấu phẩy, có thể nó lấy nó như một tuple ngay cả khi tôi không đặt trong dấu ngoặc đơn) – steabert

+0

Lệnh này không thay đổi mảng 'a'. Tuy nhiên, nó trả về một mảng được sửa đổi mới. Vì vậy, nếu yêu cầu sửa đổi 'a' thì phải sử dụng' a = numpy.append (a, a [0]) '. – Amjad

11

a[0] không phải là mảng, là phần tử đầu tiên của a và do đó không có thứ nguyên.

Hãy thử sử dụng a[0:1] để thay thế thành phần đầu tiên là a bên trong một mảng mục duy nhất.

7

thử

np.concatenate((a, np.array([a[0]])) 

http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

concatenate này cần cả hai yếu tố là mảng, tuy nhiên một [0] không phải là một mảng. Đó là lý do tại sao nó không hoạt động.

+0

Hoặc, đơn giản hơn 'np.concatenate ((a, [a [0]]))'. Tuy nhiên, danh sách sẽ tự động được thăng hạng lên một loại mảng, giúp bạn tiết kiệm một số thao tác nhập. –

3

Đây có thể là một chút quá mức cần thiết, nhưng tôi luôn luôn sử dụng các np.take chức năng cho bất kỳ bọc xung quanh lập chỉ mục :

>>> a = np.array([1, 2, 3]) 
>>> np.take(a, range(0, len(a)+1), mode='wrap') 
array([1, 2, 3, 1]) 

>>> np.take(a, range(-1, len(a)+1), mode='wrap') 
array([3, 1, 2, 3, 1]) 
0

Giả sử a=[1,2,3] và bạn muốn nó là [1,2,3,1].

Bạn có thể sử dụng được xây dựng trong chức năng append

np.append(a,1) 

đây 1 là một int, nó có thể là một chuỗi và nó có thể hoặc không thuộc về các yếu tố trong mảng. In: [1,2,3,1]

+0

Chào mừng bạn đến với StackOverflow! Bạn có thể muốn đọc [hướng dẫn này] (https://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) về cách định dạng mã và sau đó cập nhật câu trả lời của bạn để nó là dễ đọc hơn :) Ngoài ra đây là một câu hỏi rất cũ với một câu trả lời được chấp nhận, tốt hơn để trả lời một số cái mới – 0mpurdy

0

Lệnh này,

numpy.append(a, a[0])

không làm thay đổi mảng a. Tuy nhiên, nó trả về một mảng được sửa đổi mới. Vì vậy, nếu a sửa đổi là cần thiết sau đó

a = numpy.append(a,a[0])

phải được sử dụng.

Các vấn đề liên quan