Hướng dẫn how do i save a large matrix in python? - làm cách nào để lưu một ma trận lớn trong python?

Numpy là một thư viện cực kỳ hữu ích và từ việc sử dụng nó, tôi thấy rằng nó có khả năng xử lý các ma trận khá lớn (10000 x 10000), nhưng bắt đầu đấu tranh với bất cứ thứ gì lớn hơn nhiều (cố gắng tạo ra một ma trận 50000 x 50000 thất bại). Rõ ràng, điều này là do các yêu cầu bộ nhớ lớn.

Có một cách để tạo ra các ma trận khổng lồ trong Numpy (giả sử 1 triệu x 1 triệu) theo một cách nào đó (mà không có một số địa hình ram)?

Hướng dẫn how do i save a large matrix in python? - làm cách nào để lưu một ma trận lớn trong python?

Đã hỏi ngày 28 tháng 6 năm 2009 lúc 0:32Jun 28, 2009 at 0:32

0

Pytables và numpy là con đường để đi.

PyTables sẽ lưu trữ dữ liệu trên đĩa ở định dạng HDF, với nén tùy chọn. Các bộ dữ liệu của tôi thường được nén 10 lần, rất tiện dụng khi giao dịch với hàng chục hoặc hàng trăm triệu hàng. Nó cũng rất nhanh; Máy tính xách tay 5 tuổi của tôi có thể crunch thông qua dữ liệu thực hiện nhóm giống như SQL bằng cách tổng hợp ở mức 1.000.000 hàng/giây. Không tệ cho một giải pháp dựa trên Python!

Truy cập dữ liệu như một lần tái sử dụng một lần nữa cũng đơn giản như:

data = table[row_from:row_to]

Thư viện HDF quan tâm đến việc đọc trong các khối dữ liệu có liên quan và chuyển đổi thành Numpy.

Hướng dẫn how do i save a large matrix in python? - làm cách nào để lưu một ma trận lớn trong python?

Đã trả lời ngày 30 tháng 6 năm 2009 lúc 9:11Jun 30, 2009 at 9:11

Stephen Simmonsstephen SimmonsStephen Simmons

7.5152 Huy hiệu vàng20 Huy hiệu bạc13 Huy hiệu đồng2 gold badges20 silver badges13 bronze badges

3

numpy.array có nghĩa là sống trong ký ức. Nếu bạn muốn làm việc với ma trận lớn hơn RAM của bạn, bạn phải làm việc xung quanh đó. Có ít nhất hai cách tiếp cận bạn có thể làm theo:

  1. Hãy thử một biểu diễn ma trận hiệu quả hơn để khai thác bất kỳ cấu trúc đặc biệt nào mà ma trận của bạn có. Ví dụ, như những người khác đã chỉ ra, có các cấu trúc dữ liệu hiệu quả cho ma trận thưa thớt (ma trận có rất nhiều số không), như scipy.sparse.csc_matrix. that exploits any special structure that your matrices have. For example, as others have already pointed out, there are efficient data structures for sparse matrices (matrices with lots of zeros), like scipy.sparse.csc_matrix.
  2. Sửa đổi thuật toán của bạn để làm việc trên các chương trình con. Bạn chỉ có thể đọc từ đĩa các khối ma trận hiện đang được sử dụng trong các tính toán. Các thuật toán được thiết kế để chạy trên các cụm thường hoạt động theo tỷ lệ, vì dữ liệu được đặt trên các máy tính khác nhau và chỉ được truyền qua khi cần. Ví dụ: thuật toán Fox cho phép nhân ma trận (tệp PDF).. You can read from disk only the matrix blocks that are currently being used in computations. Algorithms designed to run on clusters usually work blockwise, since the data is scatted across different computers, and passed by only when needed. For example, the Fox algorithm for matrix multiplication (PDF file).

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 2:53Jun 28, 2009 at 2:53

2

Bạn sẽ có thể sử dụng numpy.memmap để ánh xạ bộ nhớ một tệp trên đĩa. Với python mới hơn và máy 64 bit, bạn nên có không gian địa chỉ cần thiết mà không tải mọi thứ vào bộ nhớ. HĐH nên xử lý chỉ giữ một phần của tệp trong bộ nhớ.

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 1:46Jun 28, 2009 at 1:46

DopplershiftDopplershiftDopplerShift

4.7081 Huy hiệu vàng21 Huy hiệu bạc19 Huy hiệu đồng1 gold badge21 silver badges19 bronze badges

1

Để xử lý các ma trận thưa thớt, bạn cần gói scipy nằm trên numpy-xem ở đây để biết thêm chi tiết về các tùy chọn ma trận thưa thớt mà scipy cung cấp cho bạn.

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 2:23Jun 28, 2009 at 2:23

Alex Martellialex MartelliAlex Martelli

825K163 Huy hiệu vàng1203 Huy hiệu bạc1381 Huy hiệu Đồng163 gold badges1203 silver badges1381 bronze badges

0

Bài đăng của Stefano Borini đã khiến tôi nhìn vào cách mà mọi thứ đã có.

Đây chính là nó. Nó dường như làm về cơ bản những gì bạn muốn. HDF5 sẽ cho phép bạn lưu trữ các bộ dữ liệu rất lớn, sau đó truy cập và sử dụng chúng theo cùng một cách Numpy làm.

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 2:54Jun 28, 2009 at 2:54

1

Hãy chắc chắn rằng bạn đang sử dụng hệ điều hành 64 bit và phiên bản Python/Numpy 64 bit. Lưu ý rằng trên các kiến ​​trúc 32 bit, bạn có thể giải quyết thông thường 3GB bộ nhớ (với khoảng 1GB bị mất vào bộ nhớ được ánh xạ I/O và như vậy).

Với 64 bit và mọi thứ mảng lớn hơn RAM có sẵn, bạn có thể thoát khỏi bộ nhớ ảo, mặc dù mọi thứ sẽ trở nên chậm hơn nếu bạn phải trao đổi. Ngoài ra, bản đồ bộ nhớ (xem numpy.memmap) là một cách để làm việc với các tệp khổng lồ trên đĩa mà không tải chúng vào bộ nhớ, nhưng một lần nữa, bạn cần có không gian địa chỉ 64 bit để làm việc để sử dụng nhiều. Pytables cũng sẽ làm hầu hết điều này cho bạn.

Đã trả lời ngày 19 tháng 8 năm 2009 lúc 0:27Aug 19, 2009 at 0:27

DWFDWFdwf

3,4331 Huy hiệu vàng19 Huy hiệu bạc24 Huy hiệu đồng1 gold badge19 silver badges24 bronze badges

Đó là một chút alpha, nhưng http://blaze.pydata.org/ dường như đang làm việc để giải quyết vấn đề này.

Đã trả lời ngày 5 tháng 2 năm 2013 lúc 0:58Feb 5, 2013 at 0:58

Wistywistywisty

6,8871 Huy hiệu vàng29 Huy hiệu bạc29 Huy hiệu đồng1 gold badge29 silver badges29 bronze badges

Đôi khi một giải pháp đơn giản là sử dụng một loại tùy chỉnh cho các mục ma trận của bạn. Dựa trên phạm vi số bạn cần, bạn có thể sử dụng thủ công dtype và đặc biệt nhỏ hơn cho các mặt hàng của bạn. Bởi vì Numpy xem xét loại lớn nhất cho đối tượng theo mặc định, đây có thể là một ý tưởng hữu ích trong nhiều trường hợp. Đây là một ví dụ:

In [70]: a = np.arange(5)

In [71]: a[0].dtype
Out[71]: dtype('int64')

In [72]: a.nbytes
Out[72]: 40

In [73]: a = np.arange(0, 2, 0.5)

In [74]: a[0].dtype
Out[74]: dtype('float64')

In [75]: a.nbytes
Out[75]: 32

Và với loại tùy chỉnh:

In [80]: a = np.arange(5, dtype=np.int8)

In [81]: a.nbytes
Out[81]: 5

In [76]: a = np.arange(0, 2, 0.5, dtype=np.float16)

In [78]: a.nbytes
Out[78]: 8

Đã trả lời ngày 3 tháng 10 năm 2016 lúc 22:09Oct 3, 2016 at 22:09

Hướng dẫn how do i save a large matrix in python? - làm cách nào để lưu một ma trận lớn trong python?

MazdakmazdakMazdak

102K18 Huy hiệu vàng156 Huy hiệu bạc182 Huy hiệu Đồng18 gold badges156 silver badges182 bronze badges

Bạn đang hỏi làm thế nào để xử lý một ma trận phần tử 2.500.000.000 mà không có Terabyte của RAM?

Cách để xử lý 2 tỷ mặt hàng mà không cần 8 tỷ byte RAM là không giữ ma trận trong bộ nhớ.

Điều đó có nghĩa là các thuật toán tinh vi hơn nhiều để lấy nó từ hệ thống tệp thành từng mảnh.

Eric Wilson

55,7K76 Huy hiệu vàng198 Huy hiệu bạc267 Huy hiệu đồng76 gold badges198 silver badges267 bronze badges

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 2:32Jun 28, 2009 at 2:32

S.LottS.LottS.Lott

377K78 Huy hiệu vàng503 Huy hiệu bạc771 Huy hiệu Đồng78 gold badges503 silver badges771 bronze badges

2

Thông thường khi chúng tôi đối phó với các ma trận lớn, chúng tôi thực hiện chúng dưới dạng ma trận thưa thớt.

Tôi không biết liệu Numpy có hỗ trợ ma trận thưa thớt hay không nhưng tôi đã tìm thấy điều này thay thế.

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 0:45Jun 28, 2009 at 0:45

Nick Dandoulakisnick DandoulakisNick Dandoulakis

41.8K15 Huy hiệu vàng102 Huy hiệu bạc136 Huy hiệu đồng15 gold badges102 silver badges136 bronze badges

Theo như tôi biết về Numpy, không, nhưng tôi có thể sai.

Tôi có thể đề xuất cho bạn giải pháp thay thế này: Viết ma trận trên đĩa và truy cập vào các khối. Tôi đề nghị bạn định dạng tệp HDF5. Nếu bạn cần nó một cách minh bạch, bạn có thể thực hiện lại giao diện Ndarray để phân trang ma trận được lưu trữ đĩa của bạn vào bộ nhớ. Hãy cẩn thận nếu bạn sửa đổi dữ liệu để đồng bộ hóa chúng trên đĩa.

Đã trả lời ngày 28 tháng 6 năm 2009 lúc 0:46Jun 28, 2009 at 0:46

Stefano Borinistefano BoriniStefano Borini

134K95 Huy hiệu vàng285 Huy hiệu bạc417 Huy hiệu đồng95 gold badges285 silver badges417 bronze badges

1

Làm thế nào để bạn lưu trữ một ma trận lớn trong Python?

Nổi bật nhất, và giải pháp tôi đề xuất lúc đầu, là sử dụng ma trận thưa thớt của Scipy. SCIPY là một gói được xây dựng dựa trên Numpy nhưng cung cấp các cơ chế tiếp theo như ma trận thưa thớt là ma trận thông thường chỉ lưu trữ các yếu tố thể hiện một giá trị khác với 0.use Scipy's sparse matrices. Scipy is a package that builds upon Numpy but provides further mechanisms like sparse matrices which are regular matrices that do only store elements that exhibit a value different from zero.

Làm thế nào để bạn lưu trữ một ma trận trong một tập tin?

Nếu bạn muốn lưu một ma trận vào một tệp văn bản của các số, bạn có thể sử dụng jit.fprint.Nếu bạn muốn lưu trữ nhiều ma trận trong cấu trúc dữ liệu được lập chỉ mục, thực sự là một mảng ma trận, bạn có thể sử dụng JIT.jit. fprint. If you want to store multiple matrices in an indexed data structure, effectively an array of matrices, you can use jit.

Làm thế nào để bạn tạo một ma trận 6x6 trong Python?

Làm thế nào để tạo ma trận 6x6 trong câu trả lời mã Python..
R = int (input ("Nhập số lượng hàng:")).
C = int (input ("Nhập số cột:")).
# Khởi tạo ma trận ..
ma trận = [].
In ("Nhập các mục nhập theo chiều:").
# Cho đầu vào của người dùng ..

Làm thế nào để bạn nén một ma trận trong Python?

Với sự trợ giúp của phương thức numpy matrix.compress (), chúng ta có thể chọn các phần tử từ ma trận bằng cách truyền tham số dưới dạng mảng chứa giá trị 0 để không bao gồm phần tử hoặc 1 để đưa phần tử vào ma trận.Đơn giản là chúng ta vượt qua mảng boolean trong ma trận.Phương thức nén ().Numpy matrix. compress() method, we can select the elements from a matrix by passing a parameter as an array which contain the value 0 to not include the element or 1 to include the element in a matrix. Simply we pass the boolean array in matrix. compress() method.