Operace Tensor zarovnají ekvivalentní tvary a prázdné tensory.

Počínaje .NET 11 používají tenzorové operace konzistentní pravidla zarovnání tvarů. Výchozí prázdné tensory a rozsahy s nulovým řádem mají efektivní tvar [0] během výpočtů a operace můžou při zarovnání tvarů ignorovat nadbytečné počáteční jednoduché rozměry.

Tato změna se dodává v balíčku System.Numerics.Tensors, včetně podporovaných cílových frameworků. Aktualizace balíčku může mít vliv na aplikace, které cílí na dřívější .NET verze.

Verze byla představena

.NET 11

Předchozí chování

Operace tensoru zpracovávaly tvary nekonzistentně. Některé operace vyžadují přesnou shodu obrazců, zatímco jiné zarovnávaly rozměry jinak. V důsledku toho mohly být ekvivalentní obrazce s redundantními počátečními jednoprvkovými dimenzemi, jako jsou [1, 1, 3] a [3], odmítnuty nebo interpretovány odlišně napříč operacemi.

Výchozí prázdné tensory a rozsahy zachovávaly metadata rank-nula, ale operace s nimi konzistentně nezacházely jako s vektory s efektivním tvarem [0]. Operace zásobníku a zřetězení by také mohly interpretovat osu odlišně podle hodností vstupů.

Některé operace také zúžily počet logických prvků nebo posuny na int, což zabránilo správnému procházení rozsahů tensorů podporovaných nativním kódem s více než int.MaxValue prvky. Operace EqualsAny, GreaterThanOrEqualAny, GreaterThanAny, LessThanAny a LessThanOrEqualAny nekontrolovaly konzistentně úplnou délku logického vstupu, včetně prázdných vstupů.

Nové chování

Operace Tensoru teď používají sdílená pravidla zarovnání tvarů:

  • Výchozí prázdné tenzory a spans s nulovou hodností mají pro výpočty efektivní tvar [0]. Jejich uložené Rank, Lengths a Strides se nemění a explicitně uspořádané prázdné obrazce si zachovávají své rozměry.
  • Operace můžou při zarovnávání tvarů přidávat nebo odebírat nadbytečné počáteční singletonové dimenze. Například [1, 1, 3] se zarovná s [3], ale [2, 1] a [1, 2] zůstávají odlišné. Rozměry nulové délky a jednoprvkové rozměry, které nejsou na začátku, zůstávají významné.
  • Rovnost tvarů ignoruje pouze redundantní počáteční jednoprvkové dimenze. Nevysílá do jiných dimenzí.
  • Operace stack a zřetězení interpretují osu pomocí efektivního tvaru prvního vstupu. Ostatní vstupy a cíle jsou v souladu s tímto tvarem.
  • Výchozí prázdné hodnoty se mohou šířit do [2, 0]. Binární operace mezi efektivními tvary [0] a [0, 2] odmítne nekompatibilní rozměry na konci.
  • Zdroje a cíle si uchovávají požadovaná metadata tvaru, když je operace zarovnají.

Spany podporované nativním tensorem lze nyní procházet s délkami a posuny o nativní velikosti, včetně spanů s více než int.MaxValue logickými prvky. Prázdná zobrazení také uchovávají původ úložiště ve svém zdroji. Operace EqualsAny, GreaterThanOrEqualAny, GreaterThanAny, LessThanAny a LessThanOrEqualAny nyní kontrolují celý logický vstupní rozsah a správně zpracovávají prázdné vstupy.

Typ zásadní změny

Jedná se o změnu chování.

Důvod změny

Konzistentní pravidla tvarů činí operace s tensory předvídatelnějšími a zachovávají explicitně požadované rozměry, přičemž zároveň umožňují, aby ekvivalentní tvary fungovaly společně. Procházení v nativní velikosti také umožňuje operacím pokrýt celý logický rozsah rozsahů podložených větším úložištěm.

Další informace najdete v tématu dotnet/runtime#135060.

Zkontrolujte kód, který závisí na operaci tensoru, která přijímá nebo odmítá konkrétní kombinaci tvarů. U výchozích prázdných hodnot s nulovým řádem je potřeba počítat s efektivním tvarem [0] a redundantní úvodní jedničkové dimenze ignorovat při zarovnání a porovnání tvarů. Explicitní rozměry nulové délky a nepočáteční jednoprvkové dimenze zůstávají významné.

U operací stack a zřetězení interpretujte osu vzhledem k efektivnímu tvaru prvního vstupu. Pokud váš kód vyžaduje přesné uložené pořadí nebo délky, před voláním operace ověřte správnost těchto metadat. Uložená metadata výchozích prázdných hodnot se nemění.

Ovlivněná rozhraní API