2010-02-02 35 views
8

Tôi gặp vấn đề với MATLAB khi tôi đang cố tạo một ma trận có kích thước rất lớn như 40000x40000.cách tạo ma trận rất lớn bằng cách sử dụng MATLAB

ví dụ:

x = 0 (40000,40000);

thông báo lỗi là "??? Đã vượt quá kích thước biến tối đa cho phép bởi chương trình."

có giải pháp nào.

Ngoài ra tôi có một câu hỏi khác, chúng ta có thể có ma trận với kích thước cột biến như trong java hay không.

Trả lời

1

40k * 40k => 1.6 * 10^9 Số. Tôi tin rằng Zeros sẽ trở lại nổi. Vì vậy, bạn sẽ cần khoảng 1,6 * 10^9 Floats * 4 Bytes/Float => 6.4GB RAM chỉ cho một biến này ...

Bạn có shure rằng bạn cần một mảng lớn như vậy?

16

40000 * 40000 * 8 byte cho mỗi số = 12 GB, chắc chắn bạn sẽ không có đủ bộ nhớ.

Để tạo ra một ma trận khổng lồ với rất nhiều số không, bạn cần một ma trận thưa thớt:

m = sparse(40000, 40000) 

Để tạo một mảng các biến thể, bạn có thể sử dụng một mảng tế bào:

m = cell(3, 1) 
m(1) = [1,2,3] 
m(2) = [2,4,6,8,10] 
m(3) = 6+6i 
0

không, vâng, mua thêm ram, như được chỉ ra bên dưới. Sparse chỉ xóa các phần tử không.

Và trong MATLAB bạn chỉ có thể nối thêm các cột/hàng mới vào ma trận để tạo một ma trận lớn hơn.

Ah nhưng bạn có nghĩa là, bạn có thể có ma trận trong đó một cột là 10 hàng và một cột khác là 20 chẳng hạn. Không, bạn không thể làm điều đó. Đã không nghĩ rằng bạn có thể trong Java tbh.

4

Có rất nhiều điều bạn có thể làm, như những câu trả lời khác nhau chỉ ra. Câu trả lời đúng tùy thuộc vào vấn đề thực tế của bạn. Tạo sức mạnh vũ phu của một mảng lớn như vậy là không thể nếu không có một phiên bản 64 bit của MATLAB cộng với đủ bộ nhớ để lưu trữ một mảng lớn, hoặc lưu trữ mảng theo một cách khác. Bạn có thể lưu trữ các mảng ngoại tuyến, chỉ mang lại những gì bạn cần khi bạn sử dụng nó. Ví dụ, nếu những con số này sẽ luôn luôn là số nguyên nhỏ, sau đó sử dụng uint8 hoặc int8, hoặc một mảng hợp lý, thậm chí một mảng duy nhất, tất cả sẽ làm giảm các yêu cầu bộ nhớ so với mảng đôi. Hoặc sử dụng một hình thức lưu trữ thưa thớt khi thích hợp. Phần lớn phụ thuộc vào những gì bạn sẽ làm với mảng.

Theo như số lượng biến của các phần tử trong một hàng, hãy sử dụng mảng ô ở đây, không phải mảng thuần truyền thống.

0

Tôi nghĩ rằng sử dụng file đĩa cứng để lưu trữ dữ liệu đó là lựa chọn tốt nhất

1

Một con đường xung quanh các vấn đề bộ nhớ có thể là để tạo ra một ma trận matfile cho bạn. Cách tôi hiểu nó là nó bỏ qua bộ nhớ và ghi nó trực tiếp vào đĩa cứng của bạn. Tôi đã thử điều này cho ma trận quá lớn cho bộ nhớ máy tính của tôi, và nó đã được làm chậm, nhưng nó đã làm việc. Có thể bạn sẽ phải xây dựng nó một chút tại một thời điểm.

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