WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

ismatrix(rand(2,2,2))

 

markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 26.05.2014, 10:50     Titel: ismatrix(rand(2,2,2))
  Antworten mit Zitat      
Code:

>> ismatrix(rand(2,2,2))
ans = 0
 


Octave liefert in diesem Fall eine 1. Wie detektiere ich denn nun am besten in Matlab n-Dimensionale Matrizen?

Code:

function out = isNmatrix (obj)
  if  ~iscell(obj) && ~ischar(obj) && ~isscalar(obj) && ~isstruct(obj) && ndims(obj)>2
    out = 1;
  elseif ismatrix(obj)
    out = 1;
  else
    out = 0;
  end
end
 


Habt ihr eine bessere Idee?
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 26.05.2014, 11:05     Titel:
  Antworten mit Zitat      
Interessanter Effekt! ISMATRIX macht exakt das was in der Doku steht:

Zitat:

ismatrix(V) returns logical 1 (true) if size(V) returns [m n] with nonnegative integer values m and n, and logical 0 (false) otherwise.


Also ist es kein Bug. Aber richtig intuitiv ist es auch nicht.

Lösen würd ich es über SIZE.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 26.05.2014, 11:12     Titel:
  Antworten mit Zitat      
Komisch ist auch, dass iscell bei einer 3D Zelle hingegen funktioniert.
Kann denn irgendein anderes Objekt in Matlab auch noch numel(size(obj))>2 annehmen was keine Matrix ist? Spontan würde ich einfach noch ~iscell() ausschließen wollen.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 29.05.2014, 20:27     Titel:
  Antworten mit Zitat      
Also ich weiß ja nicht....


Code:

>> a={1};
>> iscell(a)

ans =

     1

>> ismatrix(a)

ans =

     1

>> whos
  Name      Size            Bytes  Class      Attributes

  a         1x1               120  cell                
  ans       1x1                 1  logical              

>> b=rand(1,2,3);
>> ismatrix(b)

ans =

     0

>> iscell(b)

ans =

     0

>> isscalar(b)

ans =

     0

>> isvector(b)

ans =

     0

>> isscalar(b)

ans =

     0

>> whos
  Name      Size             Bytes  Class      Attributes

  a         1x1                120  cell                
  ans       1x1                  1  logical              
  b         1x2x3               48  double              

 


Ob das nun genau so dokumentiert ist oder nicht. In meinen Augen ist das ganz klar ein Bug!

ismatrix erkennt keine Matrizen die mehr als zwei Dimensionen haben, dafür erkennt es dann aber Zellen, die eindeutig Zellen sind?
Zumal 3-dimensionale Matrizen überhaupt von nichts erkannt werden.

Ja, isnumeric erkennt ein rand(3,3,3). Aber das ist keine Aussage darüber, was es jetzt ist.

Und wenn man mit isnumeric argumentiert ...

Code:

>> m(1,1)='a'  

m =

a

>> m(1,2)='a'

m =

aa

>> m(2,2)='a'

m =

aa
 a

>> m(2,1)='a'

m =

aa
aa

>> ismatrix(m)

ans =

     1

>> isnumeric(m)

ans =

     0
 

_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2014, 22:09     Titel:
  Antworten mit Zitat      
Hallo,
Zitat:
Kann denn irgendein anderes Objekt in Matlab auch noch numel(size(obj))>2 annehmen was keine Matrix ist?

Ja, beispielsweise Struktur-Arrays:
Code:
s(2, 2, 2).a = 1

Ich würde sogar sagen: jeder Datentyp, in dem das nicht explizit unterbunden wird - z.B. Function Handles.

Zitat:
Ob das nun genau so dokumentiert ist oder nicht. In meinen Augen ist das ganz klar ein Bug!

Ein Bug wäre ein Verhalten, das vom beabsichtigten/spezifizierten abweicht. Das ist hier aber nicht der Fall. Man könnte höchstens darüber diskutieren, ob is2D nicht ein passenderer Name für die Funktion gewesen wäre.

Zitat:
erkennt keine Matrizen die mehr als zwei Dimensionen haben

Weil eine Matrix nun mal zwei Dimensionen hat. Bei mehr als zwei Dimensionen spricht man von einem Array. Dass "Matrix" häufig (und zugegebenermaßen früher auch von mir) im Zusammenhang mit Arrays mit mehr als zwei Dimensionen verwendet wird, macht es nicht richtiger.

Zitat:
Wie detektiere ich denn nun am besten in Matlab n-Dimensionale Matrizen?

Das mit den n-dimensionalen Matrizen hatten wir ja grade. Was ist also gemeint? Ein n-dimensionales numerisches Array? In dem Fall wäre mein Vorschlag:
Code:
isnumeric(M) && ndims(M) == n


Eine schöne Alternative zu länglichen Abfragen ist übrigens validateattributes.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 29.05.2014, 22:24     Titel:
  Antworten mit Zitat      
hm alles nicht so einfach.

Code:

>> ismatrix([])

ans =

     1
 


Je mehr man sich mit damit beschäftigt, je weniger werde ich ismatrix() benutzen. Man/Ich erwarte/t halt irgendwie was komplett anderes Very Happy

Aber validateattributes kannte ich noch nicht. Das werde ich mir die Tage mal genauer ansehen
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.05.2014, 22:42     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Man/Ich erwarte/t halt irgendwie was komplett anderes

Um dir da weiterhelfen zu können, müsste man genau wissen, was du erwartest. Insbesondere wäre interessant, inwiefern du mit einer Kombination von isnumeric und ndims nicht weiterkommst.

Code:
>> ismatrix([])
ans =
     1


Auch das entspricht der Spezifikation, da
Code:
>> size([])
ans =
     0     0


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
markuman
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 29.05.2014, 23:34     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

Zitat:
Man/Ich erwarte/t halt irgendwie was komplett anderes

Um dir da weiterhelfen zu können, müsste man genau wissen, was du erwartest. Insbesondere wäre interessant, inwiefern du mit einer Kombination von isnumeric und ndims nicht weiterkommst.

Code:
>> ismatrix([])
ans =
     1


Auch das entspricht der Spezifikation, da
Code:

 >> size([])
ans =
     0     0
 




Code:

>> numel([])

ans =

     0
>> isnumeric([])

ans =
 
     1
 


Und warum ist dann "kein Element" dennoch eine Matrize und numerisch?

Harald hat Folgendes geschrieben:

Weil eine Matrix nun mal zwei Dimensionen hat. Bei mehr als zwei Dimensionen spricht man von einem Array. Dass "Matrix" häufig (und zugegebenermaßen früher auch von mir) im Zusammenhang mit Arrays mit mehr als zwei Dimensionen verwendet wird, macht es nicht richtiger.


Bezgl ismatrix versteh ich jetzt die Abgrenzung zwischen Array und Matrix nicht ganz bezüglich der Dimension. Soweit ich mich erinnern kann, sprach man hier und da (in der Schule und auch im Studium) mal von 3-dimensionalen Vektoren oder einer 3-dimensionalen Matrize.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.05.2014, 09:22     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Und warum ist dann "kein Element" dennoch eine Matrize und numerisch?

Numerisch als Gegensatz zu beispielsweise einem leeren String ''
Ob es eine Matrix ist oder nicht ist sicher ein Grenzfall - eben eine Matrix mit 0 Zeilen / Spalten.

Zitat:
Soweit ich mich erinnern kann, sprach man hier und da (in der Schule und auch im Studium) mal von 3-dimensionalen Vektoren oder einer 3-dimensionalen Matrize.

Ein 3-dim. Vektor könnte ein Vektor mit 3 Elementen, also im 3D-Raum sein. Und wie gesagt: von 3-dim. Matrizen wird zwar gerne geredet, es gibt sie aber nicht.

Und wie gesagt: wenn du genau beschreibst, auf was du testen möchtest, dann findet sich sicher eine Lösung.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.