2

var(),它返回输入中值的方差,不接受int32作为参数:

data = [0,2,9,2,5,8,7,3,1,9,4,3,5,8,10,0,1,2,9,5,10];

>> var(double(data))
ans =
   11.8905

>> var(int32(data))
Error using var (line 59)
First argument must be single or double.

如果我删除代码中的类型检查var,我会得到:

>> var(int32(data))
ans =
   11.9000

这是因为在 MATLAB 中,整数和浮点数相减的结果是整数,因此会丢失精度(例如 int32(2) - 2.1 == 0,而不是 -0.1)。

那么为什么不var()将整数输入转换为 double 而不是抛出错误消息呢?

scatterhist()并且feedforwardnet()是另外两个不接受int32作为输入的函数的示例。除此之外,这对于编程语言的互操作性来说很烦人,因为其他一些语言中的整数可能会在 MATLAB 中转换为 int32。此外,在语义上,int32作为输入是有意义的,有时甚至比拥有更有意义double(例如,feedforwardnet()在输入指定隐藏神经元数量的情况下,我们期望有一个自然数)。

4

1 回答 1

2

我认为涉及除法等功能的函数不接受ints 来提高您使用的数据类型以及后续操作中可能发生的潜在隐式舍入的认识。

假设您int32用于保存在 RAM 上,您需要明确地将数据转换double为使用var(),因为它涉及除法

data = int32([0,2,9,2,5,8,7,3,1,9,4,3,5,8,10,0,1,2,9,5,10]);
data - var(data)

该错误将提醒您数据类型以及在双方差和您的数据之间可能发生的隐式舍入。

于 2013-05-23T23:51:36.830 回答