Matlab索引使用浮点数?

All*_*LRH 1 floating-point indexing matlab integer class

简而言之,我的问题是:

Matlab中的双精度实际上是双精度,还是具有附加属性的类作为整数?

以下是问题的背景和动机:)

>> 1:4
ans =
     1     2     3     4
>> class(ans)
ans =
double
Run Code Online (Sandbox Code Playgroud)

只是这样做会产生双重...

>> 1.00:4.00
ans =
     1     2     3     4
>> class(ans)
ans =
double
Run Code Online (Sandbox Code Playgroud)

......就像这样,即使它被打印为整数.

数字的浮点性质仅表示引入更大的数值不确定性时.

>> acosd(cosd(1:4))
ans =
     0.999999999999900   1.999999999999947   3.000000000000045   4.000000000000041
Run Code Online (Sandbox Code Playgroud)

Matlab中的双精度实际上是双精度,还是具有附加属性的类作为整数?


用"整数"定义的向量(当然实际上是双精度),它可以用来索引另一个向量,它通常是整数的属性.

>> A = [9 8 7 6]
A =
     9     8     7     6
>> idx = [4 3 2 1]
idx =
     4     3     2     1
>> class(idx)
ans =
double
>> A(idx)
ans =
     6     7     8     9
Run Code Online (Sandbox Code Playgroud)

我也试过A(acosd(cosd(1:4)))哪个不起作用.

cha*_*pjc 5

它只是一个双,但您的命令提示符format为您提供最紧凑的视图.特别,

format short
Run Code Online (Sandbox Code Playgroud)

但是你可以把它改为总是显示小数,而且很多都是

format longEng
Run Code Online (Sandbox Code Playgroud)

format帮助页面上还有许多其他选项.

有趣的是,您可以使用非整数作为colon运算符的索引,但它会发出警告.我会认真对待这个警告,因为这个索引行为很奇怪.

正如我在评论中提到的那样,MATLAB使用doubles进行索引的原因与可以在不损失MATLAB精度的情况下指定的整数的最大值有关.双精度(64位)浮点数可精确表示最大为2 ^ 53(9,007,199,254,740,992)的整数,而不会丢失任何精度.MATLAB允许的最大数组大小远低于此数字,因此不存在因浮点精度而导致索引错误的风险.