求助GPUArray运算溢出的处理方法
mathematica吧
全部回复
仅看楼主
level 9
GPUArray是14.2版本引入的函数, 我尝试了一下, 使用GPUArray进行矩阵运算比普通的方法快了不少. 但是, 在一个问题中, GPUArray数据溢出了, 而我没有办法将未溢出的数据和已溢出的数据分离开来. ReplaceAll和Select都无济于事. 有人知道如何处理吗?
代码如下
v2 = GPUArray[NumericArray[Range[0., 10., 1.], "ComplexReal32"]];
Do[v2 = v2*v2, 10];
v2 // Normal
v2 // Normal // Abs
Map[NumberQ, v2 // Normal]
Map[NumericQ, v2 // Normal]
Map[Head, v2 // Normal]
Map[If[Re[#]^2 >= 1., True, False, Indeterminate] &, v2 // Normal]
以及出现了NaN` - NaN` I 的 Abs 是 \frac{1}{\sqrt{2}} 一个匪夷所思的现象.
2026年06月09日 19点06分 1
吧务
level 15
我现在这台电脑上没14.3所以没法测,但是这应该是个已经修复的bug,总之你先试一下14.3。
2026年06月10日 10点06分 2
我已经尝试了14.3, 问题得到了解决
2026年06月11日 08点06分
level 9
一楼的图是在14.2版本上得到的结果, 而这张图是在14.3版本上运行的结果. 正常返回Indeterminate
2026年06月11日 08点06分 3
level 9
我刚刚发现了在14.2版本上的处理方法, 使用ResourceFunction["NaNQ"]. 代码 Map[ResourceFunction["NaNQ"], v2 // Normal] 的结果是 {False, False, True, True, True, True, True, True, True, True, True}
2026年06月12日 13点06分 4
1