Las operaciones de Tensor alinean formas equivalentes y tensores vacíos

A partir de .NET 11, las operaciones tensor usan reglas coherentes de alineación de formas. Los tensores vacíos predeterminados de rango cero y los spans predeterminados tienen una forma eficaz de [0] durante los cálculos, y las operaciones pueden omitir las dimensiones singleton iniciales redundantes cuando alinean las formas.

El cambio se entrega en el paquete System.Numerics.Tensors , incluidos sus marcos de destino admitidos. La actualización del paquete puede afectar a las aplicaciones que tienen como destino versiones anteriores de .NET.

Versión introducida

.NET 11

Comportamiento anterior

Las operaciones de Tensor gestionaban las dimensiones de forma incoherente. Algunas operaciones requerían coincidencias exactas de formas, mientras que otras alineaban las dimensiones de forma diferente. Como resultado, las formas equivalentes con dimensiones singleton iniciales redundantes, como [1, 1, 3] y [3], se podrían rechazar o interpretar de forma diferente entre operaciones.

Los tensores vacíos predeterminados y los segmentos conservaron los metadatos de rango cero, pero las operaciones no los trataron de forma coherente como vectores con una forma efectiva de [0]. Las operaciones de apilado y concatenación también podrían interpretar un eje de forma diferente en función de los rangos de entrada.

Algunas operaciones también limitaban los recuentos o desplazamientos de elementos lógicos a int, lo que impedía recorrer correctamente los segmentos de tensor respaldados de forma nativa con más de int.MaxValue elementos. Las operaciones EqualsAny, GreaterThanAny, GreaterThanOrEqualAny, LessThanAny y LessThanOrEqualAny no inspeccionaron de forma coherente la longitud de entrada lógica completa, incluidas las entradas vacías.

Nuevo comportamiento

Las operaciones de tensor ahora usan reglas compartidas de alineación de formas:

  • Los tensores vacíos y los segmentos predeterminados de rango cero tienen una forma eficaz de [0] para los cálculos. Sus formas almacenadas Rank, Lengthsy Strides no cambian y las formas vacías clasificadas explícitamente conservan sus dimensiones.
  • Las operaciones pueden agregar o quitar dimensiones singleton iniciales redundantes cuando alinean las formas de tensor. Por ejemplo, [1, 1, 3] se alinea con [3], pero [2, 1] y [1, 2] permanecen distintos. Las dimensiones de longitud cero y las dimensiones singleton no iniciales siguen siendo significativas.
  • La igualdad de formas omite solo las dimensiones singleton iniciales redundantes. No emite otras dimensiones.
  • Las operaciones de pila y concatenar interpretan el eje mediante la forma efectiva de la primera entrada. Otras entradas y destinos se alinean con esa forma.
  • Los valores vacíos predeterminados pueden transmitirse a [2, 0]. Una operación binaria entre formas efectivas [0] y [0, 2] rechaza las dimensiones finales incompatibles.
  • Los orígenes y destinos conservan sus metadatos de forma solicitada cuando las operaciones los alinean.

Los segmentos de tensor con respaldo nativo ahora se pueden recorrer con longitudes y desplazamientos de tamaño nativo, incluidos intervalos con más de int.MaxValue elementos lógicos. Las vistas vacías también conservan un origen de almacenamiento dentro de su fuente de procedencia. Las EqualsAnyoperaciones , GreaterThanAny, GreaterThanOrEqualAny, LessThanAnyy LessThanOrEqualAny ahora inspeccionan el intervalo de entrada lógico completo y controlan las entradas vacías correctamente.

Tipo de cambio disruptivo

Se trata de un cambio de comportamiento.

Motivo del cambio

Las reglas de formas coherentes hacen que las operaciones de tensor sean más predecibles y conserven las dimensiones solicitadas explícitamente, al tiempo que permiten que las formas equivalentes funcionen juntas. El recorrido de tamaño nativo también permite que las operaciones cubran el intervalo lógico completo de spans respaldados por un almacenamiento mayor.

Para obtener más información, vea dotnet/runtime#135060.

Revise el código que depende de una operación de tensor que acepte o rechace una combinación de formas determinada. Considere los valores vacíos predeterminados de rango cero como si tuvieran una forma efectiva de [0], y omita las dimensiones singleton iniciales redundantes durante la alineación y la comparación de formas. Las dimensiones explícitas de longitud cero y las dimensiones singleton no iniciales siguen siendo significativas.

Para las operaciones de apilado y concatenación, interprete el eje en relación con la forma efectiva de la primera entrada. Si el código requiere rangos o longitudes almacenadas exactas, valide esos metadatos antes de llamar a la operación. Los metadatos almacenados de valores vacíos predeterminados no cambian.

Las APIs afectadas