我正在读的代码有一行:
someData = nan(3, 4, 5, "single")
我找不到"nan"函数的文档,但这段代码似乎生成了一个nan的3x4x5矩阵。然而,我不知道"单身"是干什么的。用随机的其他字符串替换它会得到"error:NaN:指定的无效数据类型",用"double"替换它似乎会得到相同的结果。"single"的功能是什么?
它使nan
的结果矩阵成为包含单精度浮点数的单精度数据类型的矩阵。如果想要单精度,则需要明确指定,否则默认情况下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