2014-08-29 18 views

risposta

5

Non lo trovo affatto intuitivo. In Matematica esistono vettori di 1 dimensione (anche se sono isomorfi con scalari). Inoltre, una matrice può perfettamente avere dimensioni 1x1.

È vero che un singolo numero può essere considerato uno scalare, un 1-vettore o una matrice 1x1. guarda Matlab è:

  • Uno scalare è considerato una matrice 1x1
  • Un n -vector dista 1 x n o n x 1 matrice
  • Più in generale: le dimensioni finali singleton non contano. Ad esempio, un array 3D di dimensioni 2x3x4 può anche essere considerato, ad esempio, un array 5D di dimensioni 2x3x4x1x1.Questo funziona senza errori:

    >> a = rand(2,3,4); 
    >> a(2,2,2) 
    ans = 
        0.2575 
    >> a(2,2,2,1,1) 
    ans = 
        0.2575 
    

Ora, se si vuole verificare se A è un vettore, matrice o array multidimensionale con più di un elemento, utilizzare

numel(A)>1 

Il La funzione numel restituisce il numero di elementi del suo argomento di input.

+0

Inoltre, per le matrici vuote, solo 'ismatrix' return' true' per '[]'. Tuttavia, sia 'ismatrix' che' isvector' restituiscono 'true' per il vuoto' zeros (1,0) 'o è trasposto. Questo è perfettamente in linea con la tua risposta, ad esempio, 'n' può essere' 0'. – horchler

+0

@horchler Buon punto! –

4

Poiché Matlab interpreta gli scalari come array 1 per 1 , vedere size documentation.


Pertanto, a seconda dell'applicazione in uso, si dovrà

  • uso isscalar per distinguere un vettore da uno scalare (perché tornerà false per un vettore)
  • uso isvector di distinguere una matrice da un vettore (perché restituirà false per una matrice)

Be perché se stai cercando di capire se una variabile è un vettore e non uno scalare e usi isvector, sia uno scalare che un vettore restituiranno true - come indicato nella domanda.