【求助】在稀疏数组中一次性调取多个数值时发生了崩溃,简单版本
mathematica吧
全部回复
仅看楼主
level 1
l=32
dict=Table[2^i,{i,1,l}]
value=Range[Length[dict]]
X=SparseArray[dict->value]
Pos=Table[dict[[RandomInteger[{1,Length[dict]}]]],{i,1,Length[dict]}]
SubsetQ[dict,Pos]
Y=X[[Pos]]
2022年07月20日 14点07分 1
level 1
简单说一下,我发现当稀疏矩阵长度过长时(即使里面没有多少数值),一次性调取多个数值就会产生奔溃。
在我的电脑上,这个问题在Mathematica 11.1和13.0上都会产
CPU的型号如下:Intel(R) Core(TM) i5-7300HQ CPU @ 2.50GHz 2.50 GHz
内存为16G
希望大佬们能帮我看一下这个问题可能的原因是什么,以及是否有可以解决的办法
2022年07月20日 14点07分 2
吧务
level 10
试了下,确实有些容易崩溃,而且不止这个场景会崩溃。
用这个吧:X[[#]]&/@Pos
2022年07月20日 15点07分 3
这这这……真的不崩溃了?!大佬这什么原理?
2022年07月20日 15点07分
@漂流的Pop_can 不知道,总之这稀疏矩阵底层的多个索引的Part估计实现得不太好。Map和Table是类似的。
2022年07月20日 15点07分
@asdasd1dsadsa 大佬我又试了一下,这个语句的效果有点类似于一个数值一个数值的去取,虽然很稳定,但是速度上面有点不尽如人意[狂汗]
2022年07月20日 15点07分
吧务
level 9
我这里倒没有崩溃,不过用Extract速度比Part快
Extract[X,Partition[Pos,1]]
2022年07月22日 02点07分 4
可能我的内存稍大一点,32G。用On["Packing"]观察,Part会导致Unpacking,Extract不会
2022年07月22日 02点07分
吧务
level 13
可能和内存相关
可用内存5.24844GB,Mathematica 12.0.0 for Linux x86 (64-bit) 崩溃
终端的输出
$ Mathematica
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
No more memory available.
Mathematica kernel has shut down.
Try quitting other applications and then retry.
free(): double free detected in tcache 2
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=on -Dswing.aatext=true
2022年07月22日 13点07分 5
吧务
level 15
客服已证实这是bug。
2022年08月06日 07点08分 6
1