MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by C Zeng on 6 Jan 2013

Hi, all, I want to define and store a large scale arrays, like ones(3^N,1000,N) and N can be 15. However, matlab says it is out of memory, because of the large scale.

I wonder is there any way to resolve it? I mean, to fulfill the purpose but satisfy the requirement of matlab? Actually ones(3^N, 1000,1) is still very large scale.

Thanks.

*No products are associated with this question.*

Answer by Image Analyst on 6 Jan 2013

Accepted answer

Does it need to be double? Can it be single, uint8, or logical instead? Will it have any values other than 1 or small integers?

Show 2 older comments

C Zeng on 6 Jan 2013

Hi, sorry, still not working here. The problem is that 3^N can be very large, for example N can be 14, so 3^N*1000*N is very large, I think it exceeds the limit of Matlab. I created the array but it takes a lot of time, stay busy...

Image Analyst on 6 Jan 2013

Are you sure that you need to whole matrix in memory at one time? Can't you work in "chunks"? Like work on a smaller cube of it at a time? Will you eventually access each and every one of those elements? Or can you use "sparse" matrices? Have you read the Mathworks guidance on this issue: Memory Usage

Answer by Matt J on 6 Jan 2013

Edited by Matt J on 6 Jan 2013

Are the entries mostly zeros? Could you use the SPARSE command?

If you need to work with n-dimensional sparse arrays, there is this:

http://www.mathworks.com/matlabcentral/fileexchange/29832-n-dimensional-sparse-arrays

Matt J on 6 Jan 2013

If they are mostly ones, you can express the array as

1 + sparse_array

and rewrite your computations in terms of that.

## 0 Comments