【发布时间】:2017-03-01 06:22:59
【问题描述】:
我想将 matlab 中的稀疏矩阵转换为单精度,但是 matlab 似乎没有实现单稀疏。
而不是那样,我只是计划检查它的值是否超出单精度范围,并将它们四舍五入为单精度范围的最高和最低值。
我想做这样的事情:
for i = 1:rows
for j = 1:cols
if (abs(A(i,j) < 2^-126))
A(i,j) == 0;
end
end
end
但是,这非常慢。我可以使用另一个命令来处理 MATLAB 中的稀疏矩阵类类型吗?我注意到大多数命令不适用于稀疏数据类型。
编辑 1:
我也尝试了以下方法,但正如您所见,我的内存不足(矩阵是稀疏的,大小为 200K x 200K,约 300 万个非零):
A(A < 2^-126) = 0
Error using <
Out of memory. Type HELP MEMORY for your options.
编辑 2:
我根据@rahnema1 的输入开发的当前解决方案:
% Convert entries that aren't in single precision
idx = find(A); % find locations of nonzeros
idx2 = find(abs(A(idx)) < double(realmin('single')));
A(idx(idx2)) = sign(A(idx(idx2)))*double(realmin('single'));
idx3 = find(abs(Problem.A(idx)) > double(realmax('single')));
A(idx(idx3)) = sign(A(idx(idx3)))*double(realmax('single'));
【问题讨论】:
标签: matlab matrix sparse-matrix