Python phân bổ trước một mảng

Khi sử dụng phía C++ của gdal với các ràng buộc numpy/python. Tôi hy vọng rằng một mảng được phân bổ trước sẽ được tạo từ numpy và một con trỏ tới phần đầu của bộ đệm bộ nhớ sẽ được chuyển tới gdal

Hiện tại phương thức BandReadAsArray trong gdal_array. py thậm chí không sử dụng buf_obj được truyền vào. Nếu một buf_obj được truyền vào, nó sẽ ghi đè lên nó bằng một mảng có nhiều mảng mới. Điều này không có ý nghĩa. Phương pháp này chỉ nên sử dụng buf_obj

129 nếu buf_obj không phải là Không có. 130 buf_obj = numpy. số không (hình dạng, mã loại) 131 132 band_str = ban nhạc. ReadRaster( xoff, yoff, win_xsize, win_ysize, 133 buf_xsize, buf_ysize, kiểu dữ liệu ) 134 ar = numpy. fromstring(band_str,dtype=typecode) 135 ar = numpy. định hình lại(ar, [buf_ysize,buf_xsize])

Liệu lưu trữ dữ liệu đa chiều theo thứ tự hàng chính (kiểu C) hay cột chính (kiểu Fortran) trong bộ nhớ

like array_like, tùy chọn

Đối tượng tham chiếu để cho phép tạo các mảng không phải là mảng NumPy. Nếu một mảng giống như được chuyển vào dưới dạng like hỗ trợ giao thức __array_function__, thì kết quả sẽ được xác định bởi nó. Trong trường hợp này, nó đảm bảo việc tạo ra một đối tượng mảng tương thích với đối tượng được truyền qua đối số này

Mới trong phiên bản 1. 20. 0

Trả về . ra ndarray

Mảng dữ liệu chưa được khởi tạo (tùy ý) của hình dạng, kiểu và thứ tự đã cho. Mảng đối tượng sẽ được khởi tạo thành Không có

Xem thêm

Trả về một mảng trống với hình dạng và loại đầu vào

Trả về một giá trị thiết lập mảng mới về một

Trả lại một giá trị thiết lập mảng mới về 0

Trả về một mảng mới có hình dạng đã cho chứa đầy giá trị

ghi chú

, không giống như , không đặt giá trị mảng thành 0 và do đó có thể nhanh hơn một chút. Mặt khác, nó yêu cầu người dùng đặt tất cả các giá trị trong mảng theo cách thủ công và nên thận trọng khi sử dụng

Như chúng ta đã biết Mảng là một tập hợp các mục được lưu trữ tại các vị trí bộ nhớ liền kề nhau. Trong Python, Danh sách (Mảng động) có thể được coi là Mảng. Trong bài viết này, chúng ta sẽ tìm hiểu cách khởi tạo một mảng rỗng có kích thước cho trước. Hãy xem các cách Pythonic khác nhau để tạo một danh sách trống trong Python với một kích thước nhất định

Phương pháp 1. Khởi tạo một mảng trống bằng toán tử *

Trong ví dụ này, chúng tôi đang tạo các loại trống khác nhau bằng cách sử dụng toán tử astrick(*)

Python3




# initializes all the 10 spaces with 0’s

a= [0

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4_______0_______5
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
6

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
7

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
8_______105_______ [9_______1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1
[[[]], [[]], [[]], [[]], [[]]]
[0, 0, 0, 0, 0]
4

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4_______9_______7
[[[]], [[]], [[]], [[]], [[]]]
[0, 0, 0, 0, 0]
8

 

[[[]], [[]], [[]], [[]], [[]]]
[0, 0, 0, 0, 0]
9

[None None None None None]

[[None None None None None]
 [None None None None None]]
0=
[None None None None None]

[[None None None None None]
 [None None None None None]]
200_______0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1
[None None None None None]

[[None None None None None]
 [None None None None None]]
6
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1
[None None None None None]

[[None None None None None]
 [None None None None None]]
9

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4_______0_______2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
5=
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
7

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4_______0_______5# initializes all the 10 spaces with 0’s1

đầu ra

Creating empty list of zeros:  [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Creating empty list of None:  [None, None, None, None, None, None, None, None]
Creating 2D empty list of zeros:  [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
Creating empty list of zeros:  []

Phương pháp 2. Tạo một danh sách trống trong python với một kích thước nhất định bằng cách sử dụng khả năng hiểu danh sách

Trong ví dụ này, chúng tôi đang sử dụng khả năng hiểu Danh sách Python cho các mảng trống 1D và 2D

Python3




# initializes all the 10 spaces with 0’s2

# initializes all the 10 spaces with 0’s3

a= [0 # initializes all the 10 spaces with 0’s8 # initializes all the 10 spaces with 0’s9a0 a1

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2a4

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3a6

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
8_______105_______
[None None None None None]

[[None None None None None]
 [None None None None None]]
200_______0
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
1
[None None None None None]

[[None None None None None]
 [None None None None None]]
6 # initializes all the 10 spaces with 0’s8 =5a0 a1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4
[None None None None None]

[[None None None None None]
 [None None None None None]]
9a4

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3[2

đầu ra

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Phương pháp 3. Tạo một danh sách trống có kích thước cụ thể trong Python bằng vòng lặp

Trong ví dụ này, chúng tôi đang sử dụng vòng lặp Python cho các mảng trống 1D và 2D

Python3




[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
8_______105_______
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
7

# initializes all the 10 spaces with 0’s8 # initializes all the 10 spaces with 0’s9a0 a1

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
40102

0304

05

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3[2

 

[None None None None None]

[[None None None None None]
 [None None None None None]]
0=
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
7

# initializes all the 10 spaces with 0’s8 # initializes all the 10 spaces with 0’s9a0 a1

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
40102

03

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
0900_______11

03

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
14

đầu ra

[[[]], [[]], [[]], [[]], [[]]]
[0, 0, 0, 0, 0]

Phương pháp 4. Khởi tạo mảng trống bằng Numpy

Trong phương pháp này, chúng tôi đang sử dụng mô-đun Numpy để tạo ma trận trống có kích thước 1D và 2D bằng cách sử dụng np. trống rỗng()

Python3




[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
15
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
16

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
17

a=

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2001
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
22=
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
24
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
11

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3a6

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
28

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
29_______105_______
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
31_______105_______0_______4
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
34
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3501
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
37=0_______39
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
11

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
42

đầu ra

[None None None None None]

[[None None None None None]
 [None None None None None]]

Phương pháp 5. Khởi tạo mảng rỗng sử dụng repeat()

Trong phương thức này, chúng ta có thể sử dụng hàm repeat() từ mô-đun itertools để tạo một trình vòng lặp mới trả về cùng một giá trị trong một số lần nhất định. Điều này có thể được sử dụng để tạo một mảng trống có kích thước cụ thể bằng cách cung cấp giá trị Không có và độ dài mong muốn

Python3




[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
15
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
44

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
45

a=

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
48_______0_______490
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
35
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
2
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
53

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3a6

 

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
56

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
8_______105_______ [0_______48
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4900_______35
[None None None None None]

[[None None None None None]
 [None None None None None]]
6
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
53# initializes all the 10 spaces with 0’s8 =5a0 a1
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
4
[None None None None None]

[[None None None None None]
 [None None None None None]]
9a4

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
3[2

Đầu ra

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

Phương thức này có độ phức tạp thời gian là O(n) và không gian phụ là O(n) trong đó n là độ dài mong muốn của mảng

Tôi có nên phân bổ trước mảng Python không?

Bạn không cần phân bổ trước bất kỳ thứ gì . Đằng sau hậu trường, loại danh sách sẽ định kỳ phân bổ nhiều dung lượng hơn mức cần thiết để sử dụng ngay lập tức để phân bổ chi phí thay đổi kích thước mảng cơ bản qua nhiều lần cập nhật.

Việc phân bổ trước bộ nhớ có nghĩa là gì?

Bộ nhớ phân bổ trước. Cấu trúc dữ liệu (Lập trình) Lập trình. Cấp phát trước bộ nhớ. Việc lặp đi lặp lại việc mở rộng kích thước của một mảng theo thời gian , (ví dụ: thêm nhiều phần tử vào mảng mỗi lần thông qua một vòng lập trình), có thể ảnh hưởng xấu đến hiệu suất chương trình của bạn.

Tại sao việc phân bổ trước bộ nhớ trong Matlab lại quan trọng?

Việc thay đổi kích thước mảng nhiều lần thường yêu cầu MATLAB® dành thêm thời gian để tìm kiếm các khối bộ nhớ liền kề lớn hơn, sau đó di chuyển mảng vào các khối đó. Thông thường, bạn có thể cải thiện thời gian thực thi mã bằng cách phân bổ trước dung lượng tối đa cần thiết cho mảng.