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

时间:2013-05-23 22:16:51

标签: matlab

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()的情况下,输入指定隐藏神经元的数量,我们期望有自然数。)

1 个答案:

答案 0 :(得分:2)

我认为涉及的功能,例如不接受int来提高您使用的数据类型的认知以及后续操作中可能发生的潜在隐式舍入。

假设您使用int32保存在内存中,则需要将数据明确地转换为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)

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