Ho notato vari casi in Matlab e ottava in cui le funzioni accettano sia matrici che vettori, ma non fa la stessa cosa con i vettori come con le matrici.Incoerenze di matrice/vettore "wat" di ottava e Matlab
Questo può essere frustrante perché quando si immette una matrice con un numero variabile di righe/colonne, può essere interpretata come un vettore e fare qualcosa che non ci si aspetta quando l'altezza/larghezza è 1 per il debug difficile e casi limite condizionali strani.
ti elenco alcune che ho trovato, ma sono curioso di ciò che gli altri le persone hanno incontrato
(Nota:. Sto solo cercando per i casi in cui il codice accetta matrici come input valido Tutto ciò che solleva un'eccezione quando una matrice non vettoriale è dato come argomento non conta)
1) "diag" può essere usato per indicare diagonale di una matrice o di trasformare un vettore in una matrice diagonale
da il primo è generalmente usato solo per matrici quadrate, non è così eclatante in MATLAB, ma in Octave può essere particolarmente doloroso quando Octave interpone a All'inizio ctor con un elemento diverso da zero e tutto zeri altro come una "matrice diagonale" cioè
t=eye(3);
size(diag(t(:,3))) == [3,3]
size(diag(t(:,2))) == [3,3]
size(diag(t(:,1))) == [1,1]
2) indicizzazione in una riga vettore con Logicals restituisce una riga vettore
indicizzazione in qualsiasi altra cosa con Logicals rendimenti un vettore colonna
a = 1:3;
b = true(1,3);
size(a(b)) == [1, 3]
a = [a; a];
b = [b; b];
size(a(b)) == [6, 1]
3) indicizzazione in un vettore v con un vettore indice i restituisce un vettore della stessa (riga/col) tipo as v. Ma se uno vo i è una matrice, il valore restituito ha le stesse dimensioni di me
a = 1:3;
b = a';
size(a(b)) == [1, 3]
b = [b,b];
size(a(b)) == [3, 2]
4) max, min, ecc somma operare sulle colonne di una matrice M individiually meno M è 1xn nel qual caso essi operano su M come una singola riga vettore
a = 1:3
size(max(a)) == [1, 1]
a = [a;a]
size(max(a)) == [1, 3]
max è particolarmente negativo poiché non può nemmeno prendere una dimensione come argomento (a differenza della somma)
Quali altri casi di questo tipo dovrei fare attenzione quando si scrive codice ottava/matlab?
Giusto per chiarire: è possibile specificare la dimensione per max/min: 'min (rand (3), [], 1)' 'o max (rand (3), [], 2)' – Amro