Ja, num2str
eine einzelne Variable jeglicher Art akzeptieren und einen String zurückgeben, so dass alle diese Operationen sind gültig:
>> num2str('123')
ans =
123
>> num2str('chop')
ans =
chop
>> num2str(Inf)
ans =
Inf
er kann jedoch mit rein numerischen arra beschäftigen ys (z.B. num2str([5 456])
ist auch gültig), aber es wird bombardiert, wenn Sie versuchen, ein Zellenarray darauf zu werfen (auch wenn alle Ihre Zellen numerisch sind).
Es gibt 2 möglichen Weg, um das zu arbeiten, um alle Ihre Werte Zeichen-Arrays zu konvertieren:
1) verwenden, um ein Zwischenzellenfeld
ich eine Tabelle neu erstellt [T
] mit dem gleichen Daten als in Ihrem Beispiel. Dann läuft:
%% Intermediate Cell array
T3 = cell2table(cellfun(@num2str , table2cell(T) , 'uni',0)) ;
T3.Properties.VariableNames = T.Properties.VariableNames
T3 =
Name Data Category Description
______________ _____ _________________ ___________
'Layout' 'STR' '' ''
'Radius' 'Inf' 'Radius_2000_inf' ''
'aq' '0' '0' ''
'VehicleSpeed' '200' 'Speed_160_230' ''
erzeugt eine neue Tabelle, die nur Zeichenfolgen enthält. Beachten Sie, dass wir die Spaltennamen (kopiert aus der ursprünglichen Tabelle) neu erstellen mussten, da diese bei der Konvertierung nicht in das Zellenfeld übertragen werden. Diese Methode eignet sich für relativ kleine Tabellen, da die Rundreisetabelle/Kellerplatz/Tisch plus der Anruf zu cellfun
wahrscheinlich für größere Tabellen ziemlich langsam sind.
2) Verwenden varfun
Funktion
varfun
für Tabellen ist das Äquivalent von cellfun
für Zellenanordnungen. Sie würden denken, dass eine einfache
würde die Arbeit dann tun ... nun nein. Dies wird auch Fehler.Wenn Sie sich den Code varfun
an der durch den Fehler angezeigten Zeile ansehen, werden Sie feststellen, dass Daten in Ihrer Tabelle intern in Zellenarrays konvertiert werden und die Funktion darauf angewendet wird. Wie wir oben gesehen haben, num2str
Fehler beim Treffen mit einem Zell-Array. Der Trick, um das zu überwinden, besteht darin, eine angepasste Version von num2str
zu senden, die Zellenarrays akzeptiert. Zum Beispiel:
cellnum2str = @(x) cellfun(@num2str,x,'uni',0)
Bewaffnet mit, dass, können Sie es jetzt benutzen, um Ihre Tabelle zu konvertieren:
%% Use "varfun"
cellnum2str = @(x) cellfun(@num2str,x,'uni',0) ;
T2 = varfun(cellnum2str , T) ;
T2.Properties.VariableNames = T.Properties.VariableNames ;
Dies wird die gleiche Tabelle als im obigen Beispiel 1 herzustellen. Beachten Sie, dass wir die Spaltenüberschriften erneut der neu erstellten Tabelle zuweisen mussten (). Die Ironie ist varfun
erstickt, wenn versucht wird, die Funktion auf die Spaltenüberschriften anzuwenden, aber nicht erneut verwendet oder in der Ausgabe zurückgegeben wird ... go figure.)
Diskussion: Am Anfang habe ich versucht, die varfun
Lösung Arbeit (daher der Name T2
des Ergebnisses) zu machen, und wollte diese empfehlen, weil ich nicht die Tabelle/Zelle/Tabellenumwandlung gefallen hat, der anderen Lösung. Jetzt habe ich gesehen, was in varfun
geht, ich bin mir nicht so sicher, dass diese Lösung schneller sein wird. Es könnte etwas semantischer lesbar sein, aber wenn Geschwindigkeit ein Problem ist, müssen Sie beide Version versuchen und wählen, welche Ihnen die besten Ergebnisse gibt.
ist der Inf-Eintrag in einem Vektor enthalten? Hast du mat2str ausprobiert? – stmfunk
gibt mir: Fehler bei der Verwendung von mat2str (Zeile 55) Eingabematrix muss numerisch sein. –
was ist 'str2double' – GameOfThrows