Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maximum array size in MATLAB?

I'm writing a MATLAB program that will generate a matrix with 1 million rows and an unknown amount of columns (at max 1 million).

I tried pre-allocating this matrix:

a=zeros(1000000,1000000)

but I received the error:

"Maximum variable size allowed by the program is exceeded."

I have a feeling that not pre-allocating this matrix will seriously slow the code down.

This made me curious: What is the maximum array size in MATLAB?

Update: I'm going to look into sparse matrices, because the result I am aiming for in this particular problem will be a matrix consisting for the larger part of zeros.

like image 819
Pieter Avatar asked Feb 25 '10 07:02

Pieter


People also ask

How do you increase the maximum array size in MATLAB?

Accepted Answer Go to MATLAB > Preferences > Workspace and ensure the Maximum array size limit is set to 100%. Then execute 'memory' command in the Command Window and send the output. Ensure that the Maximum possible array size is larger than the memory required by the data.

What is the maximum size of an array?

The maximum allowable array size is 65,536 bytes (64K). Reduce the array size to 65,536 bytes or less. The size is calculated as (number of elements) * (size of each element in bytes).

What is the size of an array MATLAB?

sz = size( A ) returns a row vector whose elements are the lengths of the corresponding dimensions of A . For example, if A is a 3-by-4 matrix, then size(A) returns the vector [3 4] .

What is the maximum variable size in MATLAB?

Direct link to this comment The maximum size of a matrix of logical or uint8, of size 2^N by N, that can be processed in MATLAB, is 2^42 by 42.


2 Answers

Take a look at this page, it lists the maximum sizes: Max sizes

It looks to be on the order of a few hundred million. Note that the matrix you're trying to create here is: 10e6 * 10e6 = 10e12 elements. This is many orders of magnitude greater than the max sizes provided and you also do not have that much RAM on your system.

My suggestion is to look into a different algorithm for what you are trying to accomplish.

like image 94
CookieOfFortune Avatar answered Sep 30 '22 02:09

CookieOfFortune


To find out the real maximum array size (Windows only), use the command user = memory. user.maxPossibleArrayBytes shows how many bytes of contiguous RAM are free. Divide that by the number of bytes per element of your array (8 for doubles) and you know the max number of elements you can preallocate.

Note that as woodchips said, Matlab may have to copy your array (if you pass by value to a subfunction, for example). In my experience 75% of the max possible array is usually available multiple times.

like image 41
Jonas Avatar answered Sep 30 '22 01:09

Jonas