后知后觉 发表于 2007-10-1 10:18

matlab支持的矩阵最大维数是多少?

刚发现矩阵取大了不行。

按我实验的现象发现,好像行数和列数的和应该有限制。

但是具体是多少就不清楚了。


我做的东西是随机的,所以需要取更多的数据以便接近真实值。所以需要矩阵维数大一点。

eight 发表于 2007-10-1 10:28

原帖由 后知后觉 于 2007-10-1 10:18 发表 http://www.chinavib.com/forum/images/common/back.gif
刚发现矩阵取大了不行。

按我实验的现象发现,好像行数和列数的和应该有限制。

但是具体是多少就不清楚了。


我做的东西是随机的,所以需要取更多的数据以便接近真实值。所以需要矩阵维数大一点。

矩阵太大可以先使用稀疏矩阵的形式申请空间,此外,矩阵维数过多的时候应考虑精简维数

后知后觉 发表于 2007-10-1 10:51

恩,谢谢‘八’哥的建议。

我看看能不能做到。

我只是想问问有没有知道matlab矩阵最大维数的。我想利用最大的维数,这样从统计意义上讲,结果会比较精确点。

wanyeqing2003 发表于 2007-10-1 15:45

做什么分析,需要那么大的矩阵?

pengweicai 发表于 2007-10-1 17:09

好像是2000
不过到1000就非常慢了。
我以前求一个1000维的矩阵的逆,用了几个小时。

xjzuo 发表于 2007-10-1 17:16

这个好象要看机子的内存多大而定.

心灯 发表于 2007-10-1 18:55

回复 #6 xjzuo 的帖子

嗯,我记得每种编程语言的数组大小都是受机器的内存决定的,数值精度貌似也是CPU、内存决定的。

后知后觉 发表于 2007-10-1 20:01

回复 #4 wanyeqing2003 的帖子

模态分析。数据太少的话,精度太差,不是一般的差。

行数要求多一些。我一般取18000多了。

只是做矩阵的相乘,所以运算还可以。

我的电脑1G内存。

eight 发表于 2007-10-1 23:17

原帖由 后知后觉 于 2007-10-1 20:01 发表 http://www.chinavib.com/forum/images/common/back.gif
模态分析。数据太少的话,精度太差,不是一般的差。

行数要求多一些。我一般取18000多了。

只是做矩阵的相乘,所以运算还可以。

我的电脑1G内存。

2G的内存比较好些。18000是第一维的大小?共几维?如果是 18000*1 的矩阵,应该可以运算的

后知后觉 发表于 2007-10-2 08:14

10*18000

这样是可以运算的。

我后来想增加列数到30000.发现不行。提示说超出范围。改到25000也不行。没有再试

[ 本帖最后由 eight 于 2007-10-2 10:20 编辑 ]

咕噜噜 发表于 2007-10-2 09:44

回复 #10 后知后觉 的帖子

你用这个来处理你的实验数据的?要这么多的数据吗?你增加到那么大估计不行

[ 本帖最后由 eight 于 2007-10-2 10:20 编辑 ]

eight 发表于 2007-10-2 10:29

原帖由 后知后觉 于 2007-10-2 08:14 发表 http://www.chinavib.com/forum/images/common/back.gif
10*18000

这样是可以运算的。

我后来想增加列数到30000.发现不行。提示说超出范围。改到25000也不行。没有再试

提示出错的问题也许是当前内存不足或者页面交换区被其他程序占用导致的。试试重启电脑,然后只运行 matlab 试试。如果问题依旧,那应该是矩阵太大造成的。两个解决方法:

1. 如果你只对部分数据进行操作,而非整个矩阵,则不需要申请那么大的空间来存放整个矩阵。例如,如果你每次只对 1*18000 的数据进行处理,则只需要申请 1*18000 大小的矩阵来存储,大不了用循环罢了。这是用时间换取空间的方法(事实上,大型矩阵处理时使用循环未必比不用循环慢)

2. 如果整个矩阵的数据是关联的(针对你的处理来说),可以考虑稀疏矩阵进行申请、存取,这时候数据中的 0 不被存储下来,不过对于原始数据,这种方法不一定作用很大(0 元素不多),你试试吧

w89986581 发表于 2007-10-4 10:08

呵呵,维数过高的稀疏矩阵也是无法申请的,例如10000*10000

eight 发表于 2007-10-4 10:23

原帖由 w89986581 于 2007-10-4 10:08 发表 http://www.chinavib.com/forum/images/common/back.gif
呵呵,维数过高的稀疏矩阵也是无法申请的,例如10000*10000

应该与内存相关,我 1.5 G 内存的结果:

>> A=sparse(10000,10000);
>> whos A
Name          Size               BytesClass   Attributes
A         10000x10000            40016double    sparse   

花如月 发表于 2007-10-4 13:34

回复 #14 eight 的帖子

如果软件本身不对所申请的空间进行限制,那么就只和内存和虚拟内存有关。我256M内存的测试结果如下:>> clear all
tic
A=sparse(1e7,1e7);
whos A
toc
Name       Size                  BytesClass
A   10000000x10000000         40000016double array (sparse)
Grand total is 1 element using 40000016 bytes
Elapsed time is 0.235748 seconds.

:lol 我估计你的电脑可以申请到1e10*1e10的。
>> A=sparse(1e9,1e9);
??? Error using ==> sparse
Out of memory. Type HELP MEMORY for your options.
我的到1e8的时候,也是可以申请的。不过慢的要命

[ 本帖最后由 花如月 于 2007-10-4 13:38 编辑 ]
页: [1] 2
查看完整版本: matlab支持的矩阵最大维数是多少?