我正在阅读的代码有一行:
someData = nan(3, 4, 5, "single")
我找不到“nan”函数的文档,但是这段代码似乎生成了一个3x4x5的NaN矩阵。但是,我不知道“单身”是做什么的。用随机的其他字符串替换它会得到“错误:NaN:指定了无效的数据类型”,并将其替换为“double”似乎给出了相同的结果。 “单身”的功能是什么?
答案 0 :(得分:4)
它使nan
的结果矩阵成为single-precision data type的矩阵,其中包含单精度浮点数。如果你想要单精度,你需要明确指定,否则Octave和MATLAB默认会使用双精度。
您可以使用class
检查输出的类别。
class(nan(3, 4, 5, 'single'))
% 'single'
class(nan(3, 4, 5))
% 'double'
就目前的情况而言,它们将看起来相同,直到您开始尝试存储超出可以用单精度浮点表示法表示的数字范围的数字。这是因为单精度数字使用双精度数字的一半内存量。
a = nan(1, 1, 'single');
a(1) = 1e-64
% 0
b = nan(1, 1);
b(1) = 1e-64
% 1.000e-64
此外,如果我们使用whos
检查变量,我们可以确认尺寸差异。
a = nan(1,1,'single');
b = nan(1,1)
whos('a', 'b')
% Variables in the current scope:
%
% Attr Name Size Bytes Class
% ==== ==== ==== ===== =====
% a 1x1 4 single
% b 1x1 8 double