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
Nối các giá trị vào cuối một mảng.
Parametersarrarray_likearrarray_likeCác giá trị được gắn vào một bản sao của mảng này.
valuesarray_likearray_likeCá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, optionalCá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.
ReturnSappendndarrayappendndarrayMộ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]]] ]
4Chè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]]] ]
5Xó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]]] ]
1Hã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 [] valueErrorCá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