找回密码
 注册

微信登录

微信扫一扫,快速登录

萍聚头条

查看: 7240|回复: 22

[其他学科] 请教关于matlab的memory的问题,谢谢啦

[复制链接]
发表于 2009-7-26 17:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
如果编程过程中一个变量的值太大了,out of memory了,该怎么办啊?例如,将一个数组的所有排列组合放入另一个变量中,但是程序运行时显示出错。out=[out;choicevec(i)+ones(size(tempout, 1),1)tempout]

谢谢先啦~~~~~~~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
发表于 2009-7-26 17:53 | 显示全部楼层
本帖最后由 江南织造 于 2009-7-26 18:14 编辑

1.如果是java.lang.OutOfMemoryError
修改JAVA虚拟机的内存
请看这个
http://hi.baidu.com/zgyz/blog/item/fedb53f073cbfacb7831aaff.html

2.如果运行过程中OutOfMemory, 可增加虚拟内存
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-27 08:57 | 显示全部楼层
干嘛一定要用ones呢? choicevec(i)+1 不就行了? 用ones不是白白占用内存么?
还有, 如果matirx比较稀疏的话, 建议直接上sparse matrix. 极端节省内存
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-27 12:45 | 显示全部楼层
1.如果是java.lang.OutOfMemoryError
修改JAVA虚拟机的内存
请看这个
http://hi.baidu.com/zgyz/blog/item/fedb53f073cbfacb7831aaff.html

2.如果运行过程中OutOfMemory, 可增加虚拟内存
江南织造 发表于 2009-7-26 17:53



谢谢啦,偶重新试了一下,用了3G switche,但是还是不行啊。报错说是: error using => vertcat   out of memory   

哎~~~~~~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-27 12:49 | 显示全部楼层
干嘛一定要用ones呢? choicevec(i)+1 不就行了? 用ones不是白白占用内存么?
还有, 如果matirx比较稀疏的话, 建议直接上sparse matrix. 极端节省内存
ElberEis 发表于 2009-7-27 08:57



8好意思,能不能麻烦说详细点啊,偶是菜鸟,不是很懂啊~~~~~~~~~~~   这个其实是报错信息里面的,说是 error using => vertcat out of memory   out=[out; choicevec(i)+ones(size(tempout,1),1) tempout] 偶实在是8太明白这个到底是什么意思。谢谢啦~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-27 20:33 | 显示全部楼层
8好意思,能不能麻烦说详细点啊,偶是菜鸟,不是很懂啊~~~~~~~~~~~   这个其实是报错信息里面的,说是 error using => vertcat out of memory   out=[out; choicevec(i)+ones(size(tempout,1),1) tem ...
星星和月亮 发表于 2009-7-27 12:49


你是想 choicevec(i) 每个数值都加一吧
直接 choicevec(i)+1, 和你这个choicevec(i)+ones(size(tempout,1),1)  效果是等同的
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-27 23:17 | 显示全部楼层
你是想 choicevec(i) 每个数值都加一吧
直接 choicevec(i)+1, 和你这个choicevec(i)+ones(size(tempout,1),1)  效果是等同的
江南织造 发表于 2009-7-27 20:33


我其实是有一串数组,然后求他们不同的组合排列,但是这个数组有29个元素,然后从中取12个进行排列组合,运行了很长很长很长时间以后就告诉我out of memory。然后我又尝试了3G开关,也不行啊~~~~~~~~~ 我原程序里面没有用过choicevec(i),我用的是combntns(t, a)。那个choicevec(i)是报错信息里面出来的,我也不明白是怎么回事啊~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-27 23:27 | 显示全部楼层
我其实是有一串数组,然后求他们不同的组合排列,但是这个数组有29个元素,然后从中取12个进行排列组合,运行了很长很长很长时间以后就告诉我out of memory。然后我又尝试了3G开关,也不行啊~~~~~~~~~ 我原程序里 ...
星星和月亮 发表于 2009-7-27 23:17


汗一个, 29取12的排列组合..............确实有点大, 10的24还是23次方个数据
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-28 01:09 | 显示全部楼层
汗一个, 29取12的排列组合..............确实有点大, 10的24还是23次方个数据
江南织造 发表于 2009-7-27 23:27



对啊,所以我到现在也没想出来怎么解决这个问题啊~~~~~~~~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-28 11:39 | 显示全部楼层
这样讨论没效率.
你把你的代码当中造成内存溢出的那一部分贴上来看看
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-28 11:43 | 显示全部楼层
6# 江南织造

没错, 结果是一样的. 但是内存占用是不一样的. ones是要额外创建vector, 是占用内存的, 而加是遍历计算, 不占用内存的. 参见:

Using Memory Efficiently
Strategies for Efficient Use of Memory
第一条:
To conserve memory when creating variables, Avoid creating large temporary variables, and clear temporary variables when they are no longer needed.
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-28 12:32 | 显示全部楼层
本帖最后由 ElberEis 于 2009-7-28 13:18 编辑

http://www.chinavib.com/space/63517/viewspace-16849.html

我试了一下nchoosek(a,k)和perms(), 还是内存出界

这个内存一个都省不了啊
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-28 21:10 | 显示全部楼层
这样讨论没效率.
你把你的代码当中造成内存溢出的那一部分贴上来看看
ElberEis 发表于 2009-7-28 11:39



for x=E:-1:1
     for y=1:length(G)
           if Tree_matrix(x,y)>0
                 t=[t Tree_matrix(x,y)]
           end
     end
end
pack;
Combination_matrix=combntns(t,E);

就是这段代码溢出了~~~~~~~~~~~~~~~   能不能麻烦帮我看一下啊,谢谢啦~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-28 21:17 | 显示全部楼层
对啊,所以我到现在也没想出来怎么解决这个问题啊~~~~~~~~~~~~~~~~~~
星星和月亮 发表于 2009-7-28 01:09


10的18次方个矩阵元素需要7.2760e+006 TB 的内存, 这个星球上还没这么大的内存啊MM

具体参见

http://zhidao.baidu.com/question/54002163.html
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-28 21:59 | 显示全部楼层
10的18次方个矩阵元素需要7.2760e+006 TB 的内存, 这个星球上还没这么大的内存啊MM

具体参见

http://zhidao.baidu.com/question/54002163.html
江南织造 发表于 2009-7-28 21:17



哎~~~~~~~~~~~~~~~ 偶哭S啊~~~~~~~~~~~~~~~~· 难道要再换个算法?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-29 00:03 | 显示全部楼层
哎~~~~~~~~~~~~~~~ 偶哭S啊~~~~~~~~~~~~~~~~· 难道要再换个算法?
星星和月亮 发表于 2009-7-28 21:59


嫩到底要干吗来着?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-29 02:24 | 显示全部楼层
嫩到底要干吗来着?
江南织造 发表于 2009-7-29 00:03



求一个点到另外一个点的最短路径的数量~~~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-29 12:03 | 显示全部楼层
本帖最后由 ElberEis 于 2009-7-29 12:18 编辑

同意 江南织造

如果你在n个数当中选取m个数的排列组合, 排列组合的数目是:

n! / (n-m)!

现在n=29, m=12, 排列组合的数目是29!/(29-12)!, 每一个排列组合需要12个int的存储空间.

如果要存储所有的结果, 你至少需要 大约 29 8298 8307 8195 2000 byte 的内存

现在的主流硬盘大概是1TB, 大概是1.1e12 byte

所以不可能完全存储下来. 必须修改算法, 只能存储必要的内容, 随用随消
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-29 12:08 | 显示全部楼层
什么叫做 "求一个点到另外一个点的最短路径的数量" ?

既然是最短路径, 怎么会有多个?

你能不能描述一下你的算法先?
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-29 15:24 | 显示全部楼层
什么叫做 "求一个点到另外一个点的最短路径的数量" ?

既然是最短路径, 怎么会有多个?

你能不能描述一下你的算法先?
ElberEis 发表于 2009-7-29 12:08





就好比这个图里面点1到点5的最短路径数量就是2个,即点1到点3到点5,点1到点4到点5。这些点和连接都用矩阵来表示,然后通过矩阵来求点与点之间最短路径的数量。这个图的矩阵就是:  [0 1 1 1 0; 1 0 1 0 0; 1 1 0 0 1; 1 0 0 0 1; 0 0 1 1 0]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

×
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-7-29 22:57 | 显示全部楼层
2648868

就好比这个图里面点1到点5的最短路径数量就是2个,即点1到点3到点5,点1到点4到点5。这些点和连接都用矩阵来表示,然后通过矩阵来求点与点之间最短路径的数量。这个图的矩阵就是:  [0 1 1 1 0; 1  ...
星星和月亮 发表于 2009-7-29 15:24


参考下dijkstra算法
看这个
http://www.mathworks.com/matlabcentral/fileexchange/20025
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-30 14:13 | 显示全部楼层
参考下dijkstra算法
看这个
http://www.mathworks.com/matlabcentral/fileexchange/20025
江南织造 发表于 2009-7-29 22:57



太感谢啦,偶研究下先~~~~~~~~~~~~~~~~
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

发表于 2009-9-9 15:40 | 显示全部楼层
if you cann't simplify your algorithm and the data accuracy are not the most important,
you can try to use the single data type to reduce your required memory at 50%.

Additional, the Matlab x64 is not limited at 3G Memory, you can take this version for your problem,

good luck
Die von den Nutzern eingestellten Information und Meinungen sind nicht eigene Informationen und Meinungen der DOLC GmbH.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

我是开心果

Archiver|手机版|AGB|Impressum|Datenschutzerklärung|萍聚社区-德国热线-德国实用信息网

GMT+2, 2025-6-16 08:52 , Processed in 0.103969 second(s), 33 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表