Hướng dẫn can you append a numpy array to a list in python? - bạn có thể nối một mảng numpy vào một danh sách trong python không?

Sử dụng Python3.5.3 trong Spyder 3.1.3 trên Raspbian trên Raspberry Pi. Việc nối hai lần kết nối Numpy vào danh sách có tên 'List0' hoạt động tốt với các mảng Numpy được phân bổ 'A' Like:

import numpy as np

list0 = []
a = np.array([[1,2,3],[2,3,4]])
list0.append(a)
a = np.array([[11,12,13],[12,13,14]])
list0.append(a)

print("list0 =",list0)

Hoạt động tốt, cung cấp dưới dạng đầu ra (được định dạng tốt hơn một chút cho bài viết):

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]

Thay thế bài tập cho một vòng lặp, những điều kỳ lạ xảy ra:

import numpy as np
a = np.empty((3), int)
list0 = []
for idx in range(4):    
    for i in range(3):
        a[i] = idx*10 + i
    print("idx =",idx,"; a =",a)
    list0.append(a)
print("list0 =",list0)

Dòng thứ hai cho Python biết hình dạng của mảng được sử dụng (trong trường hợp ban đầu của tôi, đó là một mảng ba chiều). Để xác minh, các mảng được tạo có tên 'A' được in ra. Việc nối thêm các mảng mới được lấp đầy '' đến 'list0' cuối cùng cũng hiển thị bốn lần dòng cuối cùng.

idx = 0 ; a = [ 0  1  2]
idx = 1 ; a = [10 11 12]
idx = 2 ; a = [20 21 22]
idx = 3 ; a = [30 31 32]
list0 = [ array([30, 31, 32]), array([30, 31, 32]), 
          array([30, 31, 32]), array([30, 31, 32]) ] 

Tôi cho rằng 'list0' chỉ đơn giản là chứa bốn lần một con trỏ tới mảng 'A' chỉ tồn tại trong một phạm vi thể hiện / bộ nhớ.

Vậy: Làm thế nào tôi có thể nối vật lý (sao chép?) Mỗi ​​mảng khác nhau 'A' vào danh sách? Đó có phải là một lỗi Python hay đơn giản là sự hiểu lầm của tôi về một cái gì đó? Chắc chắn tôi nên nghĩ thêm Pythonia; C)

Cảm ơn sự giúp đỡ, Peter

numpy.append (mảng, giá trị, trục = không) [nguồn]#append(arr, values, axis=None)[source]#

Nối các giá trị vào cuối một mảng.

Parametersarrarray_likearrarray_like

Các giá trị được gắn vào một bản sao của mảng này.

valuesarray_likearray_like

Các giá trị này được gắn vào một bản sao của ARR. Nó phải có hình dạng chính xác (hình dạng giống như ARR, không bao gồm trục). Nếu trục không được chỉ định, các giá trị có thể là bất kỳ hình dạng nào và sẽ được làm phẳng trước khi sử dụng.

Trục, tùy chọnint, optional

Các trục dọc theo đó các giá trị được nối thêm. Nếu trục không được đưa ra, cả ARR và các giá trị đều được làm phẳng trước khi sử dụng.

ReturnSappendndarrayappendndarray

Một bản sao của ARR với các giá trị được thêm vào trục. Lưu ý rằng

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
3 không xảy ra tại chỗ: một mảng mới được phân bổ và điền. Nếu trục là không, ra là một mảng phẳng.

Xem thêm

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
4

Chèn các phần tử vào một mảng.

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
5

Xóa các phần tử khỏi một mảng.

Ví dụ

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

Khi trục được chỉ định, các giá trị phải có hình dạng chính xác.

>>> np.append([[1, 2, 3], [4, 5, 6]], [[7, 8, 9]], axis=0)
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.append([[1, 2, 3], [4, 5, 6]], [7, 8, 9], axis=0)
Traceback (most recent call last):
    ...
ValueError: all the input arrays must have same number of dimensions, but
the array at index 0 has 2 dimension(s) and the array at index 1 has 1
dimension(s)

Chức năng Python Numpy append () được sử dụng để hợp nhất hai mảng. Hàm này trả về một mảng mới và mảng ban đầu vẫn không thay đổi.

Numpy append () cú pháp

Cú pháp chức năng là:

numpy.append(arr, values, axis=None)
  • ARR có thể là một đối tượng giống như mảng hoặc một mảng numpy. Các giá trị được gắn vào một bản sao của mảng này.arr can be an array-like object or a NumPy array. The values are appended to a copy of this array.
  • Các giá trị là các đối tượng giống như mảng và nó được thêm vào cuối các phần tử của ARR ARR.values are array-like objects and it’s appended to the end of the “arr” elements.
  • Trục chỉ định trục dọc theo giá trị nào được nối thêm. Nếu trục không được cung cấp, cả hai mảng đều được làm phẳng.axis specifies the axis along which values are appended. If the axis is not provided, both the arrays are flattened.

Python Numpy.Append () Ví dụ

Hãy cùng xem xét một số ví dụ về hàm numpy append ().

1. Làm phẳng hai mảng

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[10, 20], [30, 40]])

# no axis provided, array elements will be flattened
arr_flat = np.append(arr1, arr2)

print(arr_flat)  # [ 1  2  3  4 10 20 30 40]

2. Hợp nhất dọc theo trục

import numpy as np

arr_merged = np.append([[1, 2], [3, 4]], [[10, 20], [30, 40]], axis=0)
print(f'Merged 2x2 Arrays along Axis-0:\n{arr_merged}')

arr_merged = np.append([[1, 2], [3, 4]], [[10, 20], [30, 40]], axis=1)
print(f'Merged 2x2 Arrays along Axis-1:\n{arr_merged}')

Output:

Merged 2x2 Arrays along Axis-0:
[[ 1  2]
 [ 3  4]
 [10 20]
 [30 40]]
Merged 2x2 Arrays along Axis-1:
[[ 1  2 10 20]
 [ 3  4 30 40]]
  • Khi các mảng 2x2 được hợp nhất dọc theo trục x, kích thước mảng đầu ra là 4x2.
  • Khi các mảng 2x2 được hợp nhất dọc theo trục y, kích thước mảng đầu ra là 2x4.

3. Hợp nhất các mảng của các hình dạng khác nhau

Hàm append () ném giá trịerRor nếu cả hai mảng có hình dạng khác nhau, không bao gồm trục. Hãy để hiểu về kịch bản này với một ví dụ đơn giản.

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
0
  • Trong ví dụ đầu tiên, các phần tử mảng được làm phẳng. Vì vậy, ngay cả khi chúng có kích thước hoàn toàn khác nhau - 1x2 và 2x3, phần nối () hoạt động tốt.
  • Trong ví dụ thứ hai, các hình dạng mảng là 1x2 và 2x2. Vì chúng tôi đang nối thêm dọc theo trục 0, hình dạng 0 trục có thể khác nhau. Các hình dạng khác phải giống nhau, vì vậy phần phụ này () cũng sẽ hoạt động tốt.

Output:

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
1

Hãy cùng xem xét một ví dụ khác, nơi ValueError sẽ được nêu ra.

list0 = [ array([[ 1,  2,  3], [ 2,  3,  4]]), 
          array([[11, 12, 13], [12, 13, 14]]) ]
2Python numpy append () valueError
Hướng dẫn can you append a numpy array to a list in python? - bạn có thể nối một mảng numpy vào một danh sách trong python không?
Python numpy append() ValueError

Các hình dạng mảng là 1x2 và 2x3. Vì hình dạng trục-1 là khác nhau, giá trịerror được nâng lên. Tham khảo: API DocReference: API Doc

Bạn có thể nối một mảng vào danh sách Python không?

Nếu bạn đang sử dụng danh sách làm mảng, bạn có thể sử dụng các hàm append (), chèn () và mở rộng () của nó. Bạn có thể đọc thêm về nó tại Python thêm vào danh sách. Nếu bạn đang sử dụng mô -đun mảng, bạn có thể sử dụng cách ghép bằng toán tử +, append (), chèn () và mở rộng () các hàm để thêm các phần tử vào mảng.you can use its append(), insert(), and extend() functions. You can read more about it at Python add to List. If you are using array module, you can use the concatenation using the + operator, append(), insert(), and extend() functions to add elements to the array.

Bạn có thể chuyển đổi mảng numpy thành liệt kê trong Python không?

Với Numpy, các đối tượng [np.array] có thể được chuyển đổi thành một danh sách với hàm Tolist ().Hàm Tolist () không chấp nhận bất kỳ đối số nào.Nếu mảng là một chiều, một danh sách với các phần tử mảng được trả về. array ] objects can be converted to a list with the tolist() function. The tolist() function doesn't accept any arguments. If the array is one-dimensional, a list with the array elements is returned.

Mảng numpy có thể được thêm vào không?

append () được sử dụng để nối các giá trị vào cuối một mảng.Nó có trong các đối số sau: ARR: Các giá trị được gắn vào một bản sao của mảng này.. It takes in the following arguments: arr : values are attached to a copy of this array.

Có nối lại với mảng numpy nhanh hơn danh sách không?

Các mảng Numpy nhanh hơn danh sách để làm điều đó, chúng tôi sẽ tính toán giá trị trung bình của 1 triệu mảng phần tử bằng cả Numpy và Danh sách.Mảng được tạo ngẫu nhiên.Theo dự đoán, chúng ta có thể thấy rằng các mảng numpy nhanh hơn đáng kể so với danh sách.Sự khác biệt tốc độ đáng kể là đáng chú ý. To do that, we will calculate the mean of 1 million element array using both NumPy and lists. The array is randomly generated. As predicted, we can see that NumPy arrays are significantly faster than lists. The considerable speed difference is noticeable.