En caso de que haya alguna duda: Nan = Non-numeric datatype
a los efectos de este desafío.
Escriba un programa o función que tome una matriz / matriz como entrada, así como una lista de índices de columna.
El desafío es eliminar las filas donde están todos los elementos en las columnas especificadas Nan
. No importa si otros elementos en la fila son numéricos o no. Con suerte, los siguientes ejemplos aclararán esto (está indexado):
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:
[]
Reglas y aclaraciones:
- La matriz siempre estará vacía.
- Los valores numéricos serán finitos, pero no necesariamente enteros o valores positivos.
- El vector índice de la columna puede estar vacío (en cuyo caso no se eliminarán filas)
- El índice de la columna nunca tendrá valores que excedan las dimensiones de la matriz.
- Puede suponer que no habrá duplicados en la lista de índice de la columna
- Puede elegir si desea utilizar valores indexados cero o uno (especifique)
- Puede tomar la entrada en cualquier formato conveniente
- La matriz como lista de listas está bien. Los índices de columna pueden ser argumentos separados
ans =
y similar es aceptado en la salida- Usted es libre de elegir qué tipo de datos no numéricos desea usar
- Debería ser imposible realizar operaciones aritméticas con este tipo de datos, o convertirlo a un número finito utilizando funciones como
float(x)
.
- Debería ser imposible realizar operaciones aritméticas con este tipo de datos, o convertirlo a un número finito utilizando funciones como
Este es el código de golf, por lo que el código más corto en bytes gana.
fuente
J
convz
yK
conQ
.z
se inicializa a entrada,Q
a entrada evaluada.?KEfnmklKm@TdKQQ
las listas vacías son falsas en Pyth, y las declaraciones de asignación devuelven el valor asignado, lo que ahorra algunos bytes. ¡Espero que disfrutes jugando al golf en Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 bytesExplicación
Espera una matriz de filas como matrices y una matriz de números indexados en 0 para que las columnas comprueben. Devuelve una matriz de matrices.
Directo
filter
ysome
. CompruebaNaN
utilizandon < Infinity
(true
para números finitos,false
paraNaN
s).fuente
CJam, 18 bytes
Un bloque (función) sin nombre que espera la matriz y los índices de columna basados en cero en la pila (la matriz en la parte superior), que deja la matriz filtrada en la pila. Estoy usando la matriz vacía
""
como valor no numérico.Pruébalo aquí.
Explicación
fuente
The column index vector can be empty (in which case no rows will be removed)
""
" ¿Quiso decir "la cadena vacía"?[]
y""
son idénticos y la representación canónica es""
(por ejemplo, que es lo que se obtiene cuando se stringify una matriz vacía).APL, 19 bytes
El argumento izquierdo debe ser una lista de índices (y debe ser una lista, no un escalar), el argumento derecho es la matriz. APL tiene dos tipos de datos, números y caracteres, por lo que esto filtra los tipos de caracteres.
Pruebas:
Explicación:
⍵[;⍺]
: seleccione las columnas dadas de la matriz0↑¨
: tome los primeros0
elementos desde el inicio de cada elemento⍬∘≡¨
: comparar con la lista numérica vacía∨/
: ver en cuál de las filas coincide al menos un elemento⍵⌿⍨
: seleccione esas filas de la matrizfuente
MATLAB,
3228 bytesContestaré mi propia pregunta por una vez. Lo mejor que puedo hacer en MATLAB es 28 bytes.
Tenía la esperanza de evitar el uso de ambosall
y deisnan
alguna manera, pero aún no he encontrado la manera.Prueba:
Esta es una función anónima sin nombre que toma la matriz de entrada como la primera variable de entrada y una lista de índices de columna como la segunda.
En MATLAB, se
NaN < Inf
evalúa como falso. Se puede suponer que todos los valores son finitos, por lo tanto, verificar si los valores son menores queinf
es equivalente a verificar si no son numéricos.any(...,2)
comprueba si hay valores verdaderos a lo largo de la segunda dimensión (filas). Si ese es el caso, se devolverán esas filas.Versión antigua:
isnan(A(:,c))
devuelve una matriz con booleanos para las columnas especificadas.~all(isnan(A(:,c)),2)
comprueba si todos los valores a lo largo de la segunda dimensión (filas) no son numéricos y lo niega. Esto da como resultado un vector booleano con unos en las posiciones que queremos mantener.A(~all(isnan(A(:,c)),2),:)
utiliza la indexación lógica para extraer las filas completas paraA
.La siguiente solución de 24 bytes funcionaría si se garantizara que los valores no son cero:
fuente
Ruby, 48 bytes
La entrada es índices basados en 0 1 .
Bastante autoexplicativo, en realidad.
select
elementos de la matriz dondeany?
los índicesmap
ped sobre la fila sonFixnum
s.Ejecución de muestra:
1: ¡ Finalmente deletreé esta palabra correctamente en el primer intento! \ o /
fuente
K5, 15 bytes
Esto utiliza columnas indexadas a 0 y la representación matricial de listas de listas naturales de K:
Indice en la matriz (
x@
) las filas donde (&
) no todo de cada (~&/'
) es nulo (^
).En acción:
fuente
MATL , 15
16bytesNaN
se representa en la entrada comoN
. La indexación se basa en 1. Por ejemplo, en el primer caso de prueba, la entrada esPruébalo en línea!
Explicación
fuente
R, 49 bytes
La entrada está basada en 1. La función toma una matriz (
m
) y un vector de índices de columna (j
) que pueden faltar.Dos casos de prueba:
fuente
Lua, 148 bytes
Una función que toma una matriz y una matriz como entrada, y genera una matriz con las filas correspondientes en
nil
. Como las matrices son muy parecidas a las matrices de C, nihilar es comofree()
si el recolector de basura no estuviera muy lejos.Las matrices están indexadas en 1 en Lua, y uso la cadena
"NaN"
como un elemento no nominativo.Puede probar Lua en línea y copiar / pegar la siguiente muestra de código para probar este envío:
fuente
Mathematica,
52514946 bytesLa entrada es [matriz como lista de listas, vector de columnas]
fuente
Haskell, 39 bytes
Esto utiliza índices basados en 0. Ejemplo de uso (estoy usando
sqrt(-1)
para crearNaN
s):Es solo un filtro simple como se ve en otras respuestas a través de la comprensión de la lista. El caso especial de una lista de índice vacía se detecta por separado.
fuente