jak przetransponować macierz 2D w miejscu?W jaki sposób przetransponować tablicę wielowymiarową w miejsce
Odpowiedz
for (int i=0; i<n; i++) {
for (int j=0; j<i; j++) {
temp = a[i][j];
a[i][j] = a[j][i];
a[j][i] = temp;
}
}
OSTRZEŻENIE! Jest to poprawne tylko dla tablic kwadratowych. Zobacz link do Wikipedii poniżej, aby uzyskać implementację macierzy innej niż kwadrat. – Mayank
Nie podano języka, ale ogólnie, to co robisz jest:
let a be your array.
for each i,j with i<j switch a[i,j] with a[j,i]
Aby uzyskać transpozycję macierzy kwadratowej musimy rozważyć elementy powyżej głównej przekątnej lub poniżej niego i Zamień każdy z odbiciem wzdłuż głównej przekątnej:
for i->0 to N-1
for j->i+1 to N-1
swap matrix[i][j] with matrix[j][i]
Po co? Po prostu zamień indeksy w dowolnym wyciągu dostępowym.
Istnieje poważna kara za dostęp do macierzy 2D w "złej" kolejności - często lepiej jest zapłacić cenę transpozycji, aby uzyskać korzyści z ciągłego dostępu do pamięci (krok jednostkowy). –
Wikipedia zawiera artykuł Przeniesienie macierzy lokalnej. Artykuł obejmuje macierze inne niż kwadratowe.
To wydaje się działać dobrze:
function transpose(a)
{
return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
wC#
string[,] Value;
//fill Value
//create transposed array
ValueAux = new string[Value.GetLength(1),Value.GetLength(0)];
for (i = 0; i < Value.GetLength(0); i++)
{
for (j = 0; j < Value.GetLength(1); j++)
{
Valueaux[j, i] = Value[i, j];
}
}
Rezultatem jest w ValueAux
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i!=j && j>i)
{
temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
}
(N
jest wielkości twojej tablicy)
- 1. W jaki sposób zwięźle przetransponować zagnieżdżone listy?
- 2. sortować wielowymiarową tablicę asocjacyjną?
- 3. Tworzenie wielowymiarową tablicę w pętli
- 4. Jak transponować tablicę wielowymiarową?
- 5. Jak sklonować tablicę wielowymiarową w języku Java?
- 6. Pętla przez tablicę wielowymiarową w Handlebars.js
- 7. Jak wydrukować wielowymiarową tablicę w ruby?
- 8. Elegancko definiuj wielowymiarową tablicę w nowoczesnym C++
- 9. Jak zrobić dynamiczną tablicę wielowymiarową w ruby?
- 10. Jak odjąć tablicę wielowymiarową w Pythonie?
- 11. Zbuduj wielowymiarową tablicę z tablicy w PHP
- 12. Konwertuj wielowymiarową tablicę PHP na tablicę javascript
- 13. Jak zainicjować tę tablicę wielowymiarową?
- 14. Czy zawsze można zamówić wielowymiarową tablicę we wszystkich wymiarach? W jaki sposób?
- 15. Jak filtrować wielowymiarową tablicę javascript
- 16. Sortuj Tablicę wielowymiarową według wartości dziesiętnych
- 17. Jak sortować tablicę wielowymiarową według kolumny?
- 18. Jak drukować następujące wielowymiarową tablicę w Java Script?
- 19. PHP - Konwertuj tablicę wielowymiarową na ciąg?
- 20. Odczytaj płaską listę w wielowymiarową tablicę/macierz w pytonie
- 21. jak przekonwertować tablicę wielowymiarową na obiekt w php?
- 22. Wstawianie wielowymiarową tablicę php do bazy mysql
- 23. PHP - Sortuj tablicę wielowymiarową według innej tablicy
- 24. Dopasowane rekurencyjnej/wielowymiarową tablicę przeciwko innej tablicy
- 25. Jak zorganizować dwie tablice mysql w jedną dużą tablicę wielowymiarową?
- 26. Jak zadeklarować i zainicjować tablicę wielowymiarową w VB.NET?
- 27. Czy można utworzyć pustą tablicę wielowymiarową w javascript/jquery?
- 28. Jak odzyskać tablicę wielowymiarową za pomocą json w Androidzie
- 29. W jaki sposób deserializować tablicę wyliczeń przy użyciu Json.Net?
- 30. Cython: w jaki sposób utworzyć tablicę klasy cdef
kwadratowa czy nie? to robi dużą różnicę – Anycorn
@aaa: Transponowanie macierzy non-square w miejscu nie ma większego sensu. – Jens
Jednak w zależności od reprezentacji (na przykład przy użyciu pojedynczej tablicy wymiarów N * M) można to zrobić. –