the tranpose of transpose doed not equals the original matrix
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Hantao Nie
am 30 Okt. 2023
Bearbeitet: James Tursa
am 23 Jan. 2024
I find that on my data(see the attachment) ,the tranpose of transpose doed not equals the original matrix. This is my code. I donot understand why (a')' does not equals a. My matlab version is R2022a.
load("a.mat")
norm((a')' - a, 'fro')
0 Kommentare
Akzeptierte Antwort
Walter Roberson
am 30 Okt. 2023
Verschoben: Walter Roberson
am 30 Okt. 2023
You have a broken sparse matrix, probably build by a third-party product, but possibly built by a broken mex file.
See a similar discussion at https://www.mathworks.com/matlabcentral/answers/1954909-sparse-matrix-entries-are-not-displayed-correctly#answer_1225544
load("a.mat")
whos a
at = a';
att = at';
whos a at att
mask = att ~= a;
locs = find(mask, 1)
a(locs)
at(locs)
att(locs)
d = att - a;
max(d(:))
min(d(:))
nnz(imag(d))
2 Kommentare
James Tursa
am 30 Okt. 2023
Bearbeitet: James Tursa
am 30 Okt. 2023
I see that Tim Davis's SPOK has been removed from the FEX. I will write a replacement and upload it when I get some free time, maybe this weekend. Should I call it SPOK for consistency in searches or give it a new name?
Weitere Antworten (1)
James Tursa
am 23 Jan. 2024
Bearbeitet: James Tursa
am 23 Jan. 2024
I finally finished my sparse matrix integrity checker. You can find it in the FEX under the name SAREK (I think you will be able to figure out the inside joke):
Here is what it reports for the posted matrix:
>> sarek(a)
SAREK -- Sparse Analyzer Real Et Komplex , by James Tursa
Compiled in version R2023a (with -R2018a option)
Running in version R2023a
Matrix is double ...
Matrix is real ...
M = 30084 >= 0 OK ...
N = 1 >= 0 OK ...
Nzmax = 9862 >= 1 OK ...
Jc[0] == 0 OK ...
Jc[N] = 9862 <= Nzmax = 9862 OK ...
Jc array OK ...
ERROR: There are 9861 Ir entries out of order or out of range
TO FIX: [M,N] = size(A); [I,J,V] = find(A); B = sparse(I,J,V,max(max(I),M),N);
All stored elements nonzero OK ...
There were ERRORS found in matrix!
ans =
9861
And if you plot the row indexes, you can see that the matrix was built in reverse order since they are all decreasing!
>> [I,J,V] = find(a);
>> plot(I)
After applying the recommended fix and re-plotting you can see that the row indexing order has been corrected:
>> [M,N] = size(a); [I,J,V] = find(a); B = sparse(I,J,V,max(max(I),M),N);
>> sarek(B)
SAREK -- Sparse Analyzer Real Et Komplex , by James Tursa
Compiled in version R2020a (with -R2018a option)
Running in version R2020a
Matrix is double ...
Matrix is real ...
M = 30084 >= 0 OK ...
N = 1 >= 0 OK ...
Nzmax = 9862 >= 1 OK ...
Jc[0] == 0 OK ...
Jc[N] = 9862 <= Nzmax = 9862 OK ...
Jc array OK ...
Ir array OK ...
All stored elements nonzero OK ...
All sparse integrity checks OK
ans =
0
>> [I,J,K] = find(B);
>> plot(I)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Sparse Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!