Estoy luchando por encontrar un equivalente de Numpy para un "patrón" de codificación de Matlab particular usando ismember.Equivalente de Matlab 'ismember' en numpy (Python)?
Desafortunadamente, este código tiende a ser el que ocupa la mayor parte del tiempo en mis scripts de Matlab, así que quiero encontrar un eficiente Numpy equivalente.
El patrón básico consiste en asignar un subconjunto a una grilla más grande. Tengo un conjunto de pares de valores clave almacenados como matrices paralelas y quiero insertar estos valores en una lista más grande de pares clave de valores almacenados de la misma manera.
Para ser más concretos, decir que tengo datos del PIB trimestrales que asigno a una cuadrícula de tiempo mensual de la siguiente manera.
quarters = [200712 200803 200806 200809 200812 200903];
gdp_q = [10.1 10.5 11.1 11.8 10.9 10.3];
months = 200801 : 200812;
gdp_m = NaN(size(months));
[tf, loc] = ismember(quarters, months);
gdp_m(loc(tf)) = gdp_q(tf);
Tenga en cuenta que no todos los cuartos aparecen en la lista de meses, por lo tanto la TF y la loc se requieren variables.
He visto preguntas similares sobre StackOverflow pero, o simplemente dar una solución pura de Python (here), o cuando se utiliza numpy entonces no se devuelve el loc argumento (here).
En mi área de aplicación particular, este patrón de código en particular tiende a surgir una y otra vez y consume la mayor parte del tiempo de CPU de mis funciones, por lo que una solución eficiente aquí es realmente crucial para mí.
Comentarios o sugerencias de rediseño también son bienvenidos.
A continuación, si lo implementará usted mismo: 1. para objetos, tome hash, ya tiene números - ordénelos y utilice la búsqueda binaria. 2. Otro enfoque: use hashmap – Mikhail
Creo que esto [respuesta de Alex Martelli] (http://stackoverflow.com/questions/1273041/how-can-i-implement-matlabs-ismember-command-in-python/1273815# 1273815) es lo mejor que puede obtener. –