Im Zweifelsfall: Nan = Non-numeric datatype
im Sinne dieser Herausforderung.
Schreiben Sie ein Programm oder eine Funktion, die eine Matrix / ein Array als Eingabe verwendet, sowie eine Liste von Spaltenindizes.
Die Herausforderung besteht darin, die Zeilen zu entfernen, in denen sich alle Elemente in den angegebenen Spalten befinden Nan
. Es spielt keine Rolle, ob andere Elemente in der Zeile numerisch sind oder nicht. Die folgenden Beispiele werden dies hoffentlich klarer machen (es ist einseitig indiziert):
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: [1 3]
Output array:
16 NaN 3 13
5 11 NaN 8
4 14 -15 1
----
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: 3
Output array =
16 NaN 3 13
4 14 -15 1
----
Input array:
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
Input column index: 1 2 4
Output array:
[]
Regeln und Erläuterungen:
- Die Matrix ist immer nicht leer
- Die numerischen Werte sind endlich, aber nicht unbedingt ganze oder positive Werte
- Der Spaltenindexvektor kann leer sein (in diesem Fall werden keine Zeilen entfernt).
- Der Spaltenindex enthält niemals Werte, die die Matrixdimensionen überschreiten
- Sie können davon ausgehen, dass die Spaltenindexliste keine Duplikate enthält
- Sie können wählen, ob Sie Werte ohne oder mit einem Index verwenden möchten (bitte angeben).
- Sie können die Eingabe in einem beliebigen Format vornehmen
- Array als Liste von Listen ist OK. Die Spaltenindizes können separate Argumente sein
ans =
und ähnliches wird in der Ausgabe akzeptiert- Sie können frei wählen, welchen nicht numerischen Datentyp Sie verwenden möchten
- Es sollte unmöglich sein, mit diesem Datentyp arithmetische Operationen durchzuführen oder ihn mit Funktionen wie in eine endliche Zahl umzuwandeln
float(x)
.
- Es sollte unmöglich sein, mit diesem Datentyp arithmetische Operationen durchzuführen oder ihn mit Funktionen wie in eine endliche Zahl umzuwandeln
Dies ist Codegolf, also gewinnt der kürzeste Code in Bytes.
quelle
J
mitvz
undK
mit ersetzenQ
.z
wird zur Eingabe,Q
zur ausgewerteten Eingabe initialisiert .?KEfnmklKm@TdKQQ
leere Listen sind in Pyth falsch, und Zuweisungsanweisungen geben den zugewiesenen Wert zurück, wodurch einige Bytes gespart werden. Ich wünsche Ihnen viel Spaß beim Golfen mit Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 BytesErläuterung
Erwartet ein Array von Zeilen als Arrays und ein Array von 0-indizierten Zahlen für die zu überprüfenden Spalten. Gibt ein Array von Arrays zurück.
Unkompliziert
filter
undsome
. PrüftNaN
mitn < Infinity
(true
für endliche Zahlen,false
fürNaN
s).quelle
CJam, 18 Bytes
Ein unbenannter Block (Funktion), der die Matrix und die auf Null basierenden Spaltenindizes auf dem Stapel erwartet (die Matrix oben), wodurch die gefilterte Matrix auf dem Stapel verbleibt. Ich verwende das leere Array
""
als nicht-numerischen Wert.Teste es hier.
Erläuterung
quelle
The column index vector can be empty (in which case no rows will be removed)
""
" Meinten Sie "the empty string"?[]
und""
sind identisch , und die kanonische Darstellung ist""
(zB es ist , was Sie bekommen , wenn Sie ein leeres Array stringify).APL, 19 Bytes
Das linke Argument sollte eine Liste von Indizes sein (und es muss eine Liste sein, kein Skalar), das rechte Argument ist die Matrix. APL verfügt über zwei Datentypen, Zahlen und Zeichen. Dadurch werden die Zeichentypen herausgefiltert.
Tests:
Erläuterung:
⍵[;⍺]
: Wählen Sie die angegebenen Spalten aus der Matrix aus0↑¨
: Nimm die ersten0
Elemente vom Anfang jedes Gegenstandes⍬∘≡¨
: Vergleiche mit der numerischen leeren Liste∨/
: Sehen Sie, in welcher der Zeilen mindestens ein Element übereinstimmt⍵⌿⍨
: Wählen Sie diese Zeilen aus der Matrix ausquelle
MATLAB,
3228 BytesIch werde meine eigene Frage einmal beantworten. Das Beste, was ich in MATLAB machen kann, sind 28 Bytes.
Ich hatte gehofft, beidesall
undisnan
irgendwie zu vermeiden , habe aber noch keinen Weg gefunden.Prüfung:
Dies ist eine unbenannte anonyme Funktion, die die Eingabematrix als erste Eingabevariable und eine Liste von Spaltenindizes als zweite verwendet.
Wird in MATLAB
NaN < Inf
mit false ausgewertet. Es kann davon ausgegangen werden, dass alle Werte endlich sind, sodass überprüft wird, ob die Werte kleiner alsinf
sind. Dies entspricht der Überprüfung, ob sie nicht numerisch sind.any(...,2)
prüft, ob es in der zweiten Dimension (Zeilen) wahre Werte gibt. In diesem Fall werden diese Zeilen zurückgegeben.Alte Version:
isnan(A(:,c))
Gibt ein Array mit Booleschen Werten für die angegebenen Spalten zurück.~all(isnan(A(:,c)),2)
prüft, ob alle Werte in der zweiten Dimension (Zeilen) nicht numerisch sind und negiert sie. Dies führt zu einem booleschen Vektor mit Einsen an den Positionen, die wir beibehalten möchten.A(~all(isnan(A(:,c)),2),:)
verwendet die logische Indizierung, um die gesamten Zeilen für zu extrahierenA
.Die folgende 24-Byte-Lösung würde funktionieren, wenn die Werte garantiert ungleich Null wären:
quelle
Ruby, 48 Bytes
Eingabe ist 0-basierte Indizes 1 .
Eigentlich ziemlich selbsterklärend.
select
Elemente aus dem Array, bei denenany?
dermap
Index über die Zeile geht, sindFixnum
s.Probelauf:
1: Ich schließlich Dinkel dieses Wort richtig beim ersten Versuch! \Ö/
quelle
K5, 15 Bytes
Dies verwendet 0-indizierte Spalten und die natürliche List-of-List-Matrixdarstellung von K:
Indizieren Sie in der Matrix (
x@
) die Zeilen, in denen (&
) nicht alle von jedem (~&/'
) null (^
) sind.In Aktion:
quelle
MATL , 15 bis
16BytesNaN
wird in der Eingabe als dargestelltN
. Die Indizierung basiert auf 1. Zum Beispiel ist im ersten Testfall die EingabeProbieren Sie es online!
Erläuterung
quelle
R, 49 Bytes
Die Eingabe ist 1-basiert. Die Funktion verwendet eine Matrix (
m
) und einen Vektor von Spaltenindizes (j
), die möglicherweise fehlen.Zwei Testfälle:
quelle
Lua, 148 Bytes
Eine Funktion, die eine Matrix und ein Array als Eingabe verwendet und eine Matrix mit den entsprechenden Zeilen an ausgibt
nil
. Da Arrays den Arrays von C ziemlich ähnlich sind, ist das Vernichten wie das Löschenfree()
, da der Garbage Collector nicht weit entfernt ist.Arrays sind in Lua 1-indiziert, und ich verwende den String
"NaN"
als Nicht-Nomber-Element.Sie können Lua online testen und das folgende Codebeispiel kopieren / einfügen, um diese Übermittlung zu testen:
quelle
Mathematica,
52514946 BytesEingabe ist [Matrix als Liste von Listen, Vektor von Spalten]
quelle
Haskell, 39 Bytes
Dies verwendet 0-basierte Indizes. Verwendungsbeispiel (ich verwende s
sqrt(-1)
zum erstellenNaN
):Es ist nur ein einfacher Filter, wie er in anderen Antworten über das Listenverständnis angezeigt wird. Der Sonderfall einer leeren Indexliste wird separat erfasst.
quelle