数据为标量时是什么意思?


78

我不知道标量的确切含义,但是我试图查看我是否在正确地考虑它。标量是否与任意性有关,其中数据的类型可以是任何类型,或者系统无法提前知道数据是什么。


有趣的事实:我最近使用(使用XQuery)的XML平台喜欢调用这些Atomic值。我认为这是密切相关的,为参考/搜索词添加了注释。
查尔斯·罗斯(Charles ross)

Answers:


112

术语“标量”来自线性代数,用于将单个数与向量或矩阵区分开。计算中的含义相似。它将单个值(如整数或浮点数)与数据结构(如数组)区分开。这种区别在Perl中非常突出,其中$sigil(类似于's')用于表示标量变量,而@sigil(类似于'a')则表示数组。它与元素本身的类型无关。它可以是数字,字符,字符串或对象。所谓的标量是其中之一。


6
这是一个很好的例子,说明同一术语在不同上下文中可能意味着不同的事物。在C或Pascal之类的语言中,标量指的是诸如int或的简单“构建块”类型char而不是诸如对象的结构化类型(即使只有一种)。
卡雷布

2
我还要补充一点,除了数组,标量也不是诸如struct或class之类的复合数据结构。区别在于,数组是同一类型的多个元素,而结构是任意类型的多个元素。

1
同样,字符串可以是非标量值。诸如Perl之类的语言将其视为标量,但是在任何基于C的语言中,我都认为它是数组或对象。

1
@Karl我不认识Perl,但是您能说明一下什么是sigil吗?
极客2014年

2
@Geek,它是您将变量放在之前的符号,例如$variable。参见维基百科页面
卡尔·比勒费尔德


19

补充助记符,用于纪念卡尔·比勒费尔德(Karl Bielefeldt)的出色答案:

一种简单的思考方式是“这可以规模化吗?”

整数可以是小数位数。

固定大小的整数可以标度,例如,从-2147483648到2147483647。

实数可以成比例。

字符,布尔值或固定精度的十进制都可以标度。甚至字符串也可以按比例缩放(我们在排序时使用了这种方式)。

因此是“标量”。

数据库行不能成比例。复数不能成比例。表示电子邮件的对象不能按比例缩放。数组,向量或矩阵不能成比例。


10
如果字符串可以缩放,为什么不数组呢?“这可以规模吗?” 至少对我而言,没有给出直观的结果。
VBCPP

2
@VBCPP在包含{1,2}的标度上位于{2,1}的地方吗?之前还是之后?现在,可以强制执行命令了,但是没有明确的命令。还请记住,我正在尝试提供一种思考的简单方法(Karl Bielefeldt的回答在给出更准确的IMO方面做得很好,我不会尝试改善它,只是提供补充)。也就是说,这里有一个上下文元素。根据上下文,字符串可能会或可能不会被视为标量;在SQL中,标量是有充分的理由的,在C中则不是,也是有充分的理由的。
乔恩·汉纳

7
这是错误的
2014年

2
尽管我认为卡尔·比勒费尔德(Karl Bielefeldt)应该打勾,但我不同意这是“错误的”。这是一种记忆不足,无法发表评论的答案,这是更好的答案。
乔恩·汉纳

2
我认为“这是错误的”评论来自这样的想法,即答案没有任何意义,您对@VBCPP的问题的回答也无法回答他的问题。我肯定喜欢助记符的概念,但是您仍然需要解释例如整数在标度上的含义。最好谈论在电视上放一只猫。
turboladen

10

就像许多计算中的情况一样;这个词的起源与更多的物理性质有关。术语“标量”在计算中相对较旧。这些天的定义不太严格。当您将数据存储在计算机内存中时,该数据可以装入一个地址(1个字节*),也可以不装入一个地址。当它成立时,它被称为标量;当它没有成立时,它被称为复合。主要是因为CPU一次只能处理一个地址/一条数据(= 1个字节)。正如@Karl Bielefeldt所说;这个词确实来自代数。

我们将字符串称为字符串,因为它是一个字符字符串。字符是标量,是标量,而字符串是标量。在多个地址中存储1个数据(数据)会使该行有些模糊。这样想:当CPU可以在一条指令中处理数据时,它就是标量。

如今,标量是任何奇异值,并且在不同语言之间可以定义不同的奇异值。如今,在大多数情况下,整数,浮点数,字符,字符串,布尔值和枚举都是标量。数组,列表,树,对象等不是。

(*我说的是1个字节,以便保持清楚,但从技术上讲,我是在谈论例如6比特在打孔卡上更常用,后来在磁条上更常用的6位)

免责声明:我无法在互联网上找到任何相关参考,我从学校和旧书中获得了这些信息,其中包括(我认为):1944年的数学表和其他计算辅助工具。也就是说,我的记忆是而不是以前的样子,因此如果有人可以修改/确认或拒绝我的回答,那将是很好的。


9

标量是一个简单的单一数字值(例如1、2 / 3、3.14等),通常是整数,不动点或浮点数(单或双),与数组,结构,对象,复数矢量(实数加上虚数或量级加上角度分量),包含多个单个数值的高维向量或矩阵(等)数据类型。

但是,请注意,也可以展平并以8位字节的计算机内存表示的那种非常复杂的大型数据类型也可以表示为一个非常长/很大的二进制标量数。图灵使用此技术将整个计算机程序表示为一个标量。


这允许使用诸如非法数字非法素数的概念-“非法”程序的数字表示。
2014年

标量不必是数字。字符串,布尔值或日期/时间也是标量。
david.pfx

那么,如果我基于几个标量的字段(例如,一个int表示月份,一年表示一天,一天表示一天)创建日期复杂的类怎么办?
皮埃尔·阿洛德

1
@ david.pfx:当以字符数组形式查看时,字符串不是标量。
MSalters 2014年

1
@MSalters:当然,被视为位数组的整数也不是。可以作为单个不可变匿名值存储和检索的任何内容都是标量,并且即使也可以用其他方式查看它们,大多数语言也允许您使用字符串,日期,复数,点等来实现。
david.pfx 2014年

1

标量一词源自拉丁语scalaris,它是斯卡拉语的形容词形式(拉丁语为“梯子”)。英语单词“ scale”也来自scala。资源

标量是持有单个值的变量。

例如:

标量变量:假设您试图将各种学生的姓名表示为一组变量。每个单独的变量都是标量变量,如下所示

NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"

标量函数:SQL标量函数根据输入值返回一个值。

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.