¿Qué significa cuando los datos son escalares?

79

No sé qué significa exactamente escalar, pero estoy tratando de ver si lo estoy pensando correctamente. El escalar se relaciona con la arbitrariedad donde el tipo de datos podría ser de cualquier tipo, o un sistema no puede saber de antemano cuáles son los datos.

Ryan M
fuente
Dato curioso: la plataforma XML en la que paso mis días recientemente (usando XQuery) le gusta llamar a estos valores atómicos. Creo que esto está estrechamente relacionado, agregando comentarios para términos de referencia / búsqueda.
Charles Ross

Respuestas:

113

El término "escalar" proviene del álgebra lineal , donde se usa para diferenciar un número único de un vector o matriz. El significado en informática es similar. Distingue un valor único como un entero o flotante de una estructura de datos como una matriz. Esta distinción es muy prominente en Perl, donde el $sigilo (que se asemeja a una 's') se usa para denotar una variable escalar y un @sigilo (que se asemeja a una 'a') denota una matriz. No tiene nada que ver con el tipo del elemento en sí. Podría ser un número, carácter, cadena u objeto. Lo que importa ser llamado escalar es que hay uno de ellos.

Karl Bielefeldt
fuente
66
Este es un buen ejemplo de cómo el mismo término puede significar cosas diferentes en contextos diferentes. En lenguajes como C o Pascal, escalar se refiere a tipos simples de "bloques de construcción" como into char, no tipos estructurados como objetos (incluso si solo hay uno).
Caleb
2
También agregaría que, además de las matrices, un escalar no es una estructura de datos compuesta, como una estructura o clase. La diferencia es que una matriz es múltiples elementos del mismo tipo, mientras que una estructura es múltiples elementos de tipos arbitrarios.
1
Además, una cadena podría ser un valor no escalar. Los lenguajes como Perl lo tratan como un escalar, pero en cualquier lenguaje basado en C diría que es una matriz u objeto.
1
@Karl No conozco a Perl, pero ¿puedes aclarar qué es un sigilo ?
Geek
2
@ Geek, es un símbolo que pones antes de una variable, como $variable. Ver la página de wikipedia .
Karl Bielefeldt
27

Un escalar es simplemente una variable que contiene un valor individual . Para los propósitos de esta discusión, supongamos que un escalar es un número único, en lugar de una colección de números.

Por ejemplo, el resultado de una consulta SQL que devuelve un número en lugar de una tupla, al igual que el método ExecuteScalar () en la clase SQLCommand , que devuelve el valor de la primera columna de la primera fila del conjunto de resultados devuelto por la consulta. Por lo general, se usa para recuperar un valor agregado, como COUNT o AVERAGE, el ID de un nuevo registro o el número de registros procesados ​​por una consulta.

Robert Harvey
fuente
19

Una mnemónica suplementaria, a la gran respuesta de Karl Bielefeldt:

Una manera simple de pensarlo es: "¿puede ser esto a escala?"

Un número entero puede estar en una escala.

Un número entero de tamaño fijo puede estar en una escala, por ejemplo, de -2147483648 a 2147483647.

Un número real puede estar en una escala.

Un carácter, booleano o decimal de precisión fija puede estar todo en una escala. Incluso una cadena puede estar en una escala (la usamos para ordenar).

De ahí "escalar".

Una fila de la base de datos no puede estar en una escala. Un número complejo no puede estar en una escala. Un objeto que representa un mensaje de correo electrónico no puede estar en una escala. Una matriz, vector o matriz no puede estar en una escala.

Jon Hanna
fuente
10
Si una cadena puede estar en una escala, ¿por qué no una matriz? "¿Puede ser esto a escala?" no da resultados intuitivos, al menos para mí.
VBCPP
2
@VBCPP, ¿en qué parte de una escala que contiene {1, 2} se sienta {2, 1}? ¿Antes o después? Ahora, dado que podemos hacer cumplir un pedido, pero no hay un pedido claro. Tenga en cuenta también que estoy tratando de ofrecer una manera fácil de pensarlo (la respuesta de Karl Bielefeldt hace un buen trabajo al dar una respuesta más precisa en mi opinión, y no trataría de mejorarla, solo un complemento). Dicho esto, hay un elemento de contexto aquí. Una cadena puede o no considerarse escalar según el contexto; en SQL es escalar por una buena razón, en C no lo es, también por una buena razón.
Jon Hanna
77
Esto es simplemente incorrecto .
Andrew Medico
2
No estoy de acuerdo con que esté "simplemente mal", obviamente, aunque creo que Karl Bielefeldt debería tener la marca. Esta es una mnemótica que es demasiado larga para ser un comentario, esa es la mejor respuesta.
Jon Hanna
2
Creo que el comentario "está mal" proviene de la idea de que la respuesta no tiene ningún sentido y su respuesta a la pregunta de @VBCPP no responde a su pregunta. Seguro que me gusta la idea de lo mnemotécnico, pero aún necesitas explicar la importancia de, por ejemplo, que un entero esté en una escala. Bien podría estar hablando de poner un gato en la televisión.
turboladen
10

Como es el caso con muchos términos en informática; El origen de la palabra se relaciona con más propiedades físicas. El término escalar es relativamente antiguo en informática. Su definición es menos estricta en estos días. Cuando almacena datos en la memoria de la computadora, estos datos pueden caber en una dirección (1 byte *) o no. Cuando lo hizo, se llamó escalar, cuando no lo hizo se llamó compuesto. Principalmente porque las CPU solo podían manejar una dirección / pieza de datos (= 1 byte) a la vez. Según lo declarado por @Karl Bielefeldt; El término fue tomado de álgebra.

Llamamos a una cadena una cadena porque es una cadena de caracteres. Un char es / era un escalar, mientras que una cadena es / era un compuesto. El almacenamiento de 1 pieza de datos (un dato) en múltiples direcciones borró un poco la línea. Piénselo así: cuando una CPU podía procesar un dato en una instrucción, era escalar.

En la actualidad, un escalar es cualquier valor singular, y el valor singular puede definirse de manera diferente entre los diferentes idiomas. enteros, flotantes, caracteres, cadenas, booleanos y enumeraciones son, en su mayor parte, escalares considerados en estos días. Las matrices, listas, árboles, objetos, etc. no lo son.

(* Digo 1 byte para mantener las cosas claras, pero técnicamente estoy hablando de los días en que los 6 bits se usaban más comúnmente en tarjetas perforadas, por ejemplo, y más tarde en bandas magnéticas)

Descargo de responsabilidad: no puedo encontrar referencias de esto en Internet, obtuve la información en la escuela y de libros antiguos, entre los cuales (creo): Tablas matemáticas y otras ayudas a la computación de 1944. Dicho esto, mi memoria es no lo que solía ser, así que si alguien puede enmendar / confirmar o negar mi respuesta, sería bueno.

Evert
fuente
9

Un escalar es un valor numérico simple simple (como en 1, 2/3, 3.14, etc.), generalmente entero, punto fijo o flotante (simple o doble), en oposición a una matriz, estructura, objeto, vector complejo ( componentes reales más imaginarios o de magnitud más ángulo), tipo de datos vectoriales o matriciales de dimensiones superiores (etc.) que contiene más de un único valor numérico.

Sin embargo, tenga en cuenta que un tipo de datos grande y muy complejo del tipo que también se puede aplanar y representar en bytes de 8 bits de la memoria de la computadora también se puede representar como un único número escalar binario muy largo / grande. Turing utilizó esta técnica para representar programas informáticos completos como un solo número escalar.

hotpaw2
fuente
Esto permite conceptos como números ilegales y números primos ilegales : representaciones numéricas de programas "ilegales".
Andrew
Un escalar no tiene que ser numérico. Una cadena, booleana o fecha / hora también es escalar.
david.pfx
Entonces, ¿qué sucede si hago una clase de fecha compleja basada en campos de varios escalares (por ejemplo, un int para el mes, uno para el año y otro para el día)?
Pierre Arlaud
1
@ david.pfx: una cadena cuando se ve como una matriz de caracteres no es escalar.
MSalters
1
@MSalters: Por supuesto, y un número entero visto como una matriz de bits tampoco lo es. Todo lo que se puede almacenar y recuperar como un único valor anónimo inmutable es un escalar y la mayoría de los idiomas le permiten hacerlo con cadenas, fechas, complejos, puntos, etc., incluso si también se pueden ver de otras maneras.
david.pfx
1

La palabra escalar deriva de la palabra latina scalaris, una forma adjetiva de scala (en latín, "escalera"). La palabra inglesa "scale" también proviene de scala. Fuente

Un escalar es una variable que tiene un valor individual.

Por ejemplo:

Variable escalar : Digamos que está tratando de representar los nombres de varios estudiantes como un conjunto de variables. Cada una de las variables individuales es una variable escalar como sigue

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

Funciones escalares : las funciones escalares de SQL devuelven un solo valor, basado en el valor de entrada.

UCASE() - Converts a field to upper case
LCASE() - Converts a field to lower case
Premraj
fuente