¿cómo puedo null ciertos valores en numpy matriz basada en la condición?
No entiendo por qué me terminan con 0 en lugar de nulo o vacío de valores en la que la condición no se cumple… b es una colección de la matriz se rellena con 0 y 1, valores, c es otra totalmente poblada numpy matriz. Todas las matrices son 71x71x166

a = np.empty(((71,71,166)))
d = np.empty(((71,71,166)))
for indexes, value in np.ndenumerate(b):
    i,j,k = indexes
    a[i,j,k] = np.where(b[i,j,k] == 1, c[i,j,k], d[i,j,k])

Quiero terminar con una matriz que solo tiene valores donde se cumple la condición y se vacía de todas partes, pero con el cambio de su forma

COMPLETO TEMA PARA que se aclare pidió:
Voy a empezar con un flotador poblada de la matriz con la forma (71,71,166)
Puedo hacer una matriz int basado en una frecuencia de corte aplicado a la flota de la matriz, básicamente, la creación de un número de contenedores, aproximadamente marcar 10 áreas dentro de la matriz con los valores 0 en entre
Lo que quiero es una matriz con la forma (71,71,166) que tiene el promedio de los valores en una matriz determinada dirección (suponiendo que la dirección vertical, si usted piensa en una matriz 3D como un cubo 3D) de un cierto «bin»…
así que yo estaba tratando de bucle a través de las «papeleras», b = a= 1, b == 2, etc, el muestreo de la flotación donde se cumple esa condición, pero siendo nulo en otro lugar para que yo pueda tomar la media, y luego se recombinan en una matriz al final del bucle….
No estoy seguro si estoy hacerme entender. Estoy usando la np.donde y el uso de la indexación como sigo recibiendo errores cuando intento hacerlo sin aunque se siente muy ineficiente.

empty a veces se llena la matriz con 0; es sin definir cuál es el contenido de un empty() matriz es, por lo tanto, 0 es perfectamente válido. Intente esto: d = np.nan * np.empty((71, 71, 166)).
Hay un número de maneras para efecto de algún tipo de «null comportamiento», por lo que es importante tener en cuenta qué quieres que los valores null en primer lugar, y cómo quiere que se comporten con otras funciones. Para una discusión en profundidad, consulte aquí.
Gracias Joe, que es útil. Estoy tratando de replicar los resultados de un programa interno de la calculadora donde los valores nulos se comportan de una manera muy específica en python y creo que me estoy proyectando formas de hacer las cosas de una en la otra – sin previo Python conocimientos estoy imitando lo que hice antes de que en lugar de hacer uso más eficiente de los algoritmos en Python….

OriginalEl autor idem | 2014-12-17

2 Comentarios

  1. 4

    Considere este ejemplo:

    import numpy as np
    data = np.random.random((4,3))
    mask = np.random.random_integers(0,1,(4,3))
    data[mask==0] = np.NaN

    Los datos se establece en nan donde el mask es 0. Usted puede usar cualquier tipo de condición que usted desee, por supuesto, o hacer algo diferente para diferentes valores de b.

    Para borrar todo excepto en una bandeja específica, intente lo siguiente:

    c[b!=1] = np.NaN

    Entonces, para hacer una copia de todo en una bandeja específica:

    a = np.copy(c)
    a[b!=1] == np.NaN

    Para obtener el promedio de todo en una bandeja:

    np.mean(c[b==1])

    Así que tal vez pueda hacer lo que quiera (donde las papeleras es una lista de bin valores):

    a = np.empty(c.shape)
    a[b==0] = np.NaN
    for bin in bins:
        a[b==bin] = np.mean(c[b==bin])
    quisiera que me den una nueva matriz con el valor de c, donde b condición (a==1 u otros valores en el futuro bucles) se cumple, y el vacío/valores null, donde no es? para mí que parece que me va a sobrescribir c, con todos los valores de b == 1 conjunto null… triste, muy nuevo en esto!
    Se acaba de darse cuenta de que podría ser un problema, y de manera preventiva hecho una edición!
    Hizo una edición basada en su información más detallada.

    OriginalEl autor jmilloy

  2. 2

    np.empty a veces se llena la matriz con 0; es sin definir cuál es el contenido de un empty() matriz es, por lo tanto, 0 es perfectamente válido. Por ejemplo, intente esto en su lugar:

    d = np.nan * np.empty((71, 71, 166)).

    Pero considerar el uso de numpy la fuerza, y no iterar a través de la matriz:

    a = np.where(b, c, d)

    (desde b es 0 o 1, he excluido la comparación explícita b == 1.)

    Incluso es posible que desee considerar el uso de un enmascarado de la matriz de lugar:

    a = np.ma.masked_where(b, c)

    que parece tener más sentido con respecto a su pregunta: «¿cómo puedo null ciertos valores en una colección de matriz basada en una condición» (reemplazar null con máscara y listo).

    gracias. Yo podría haber simplificado mi pregunta. b llegará a tener más valores de y voy bucle a través de los valores, por lo que voy a comprobar b == 1, b ==2, etc… puedo tomar el promedio de los valores restantes en un…
    Puede agregar su pregunta a la actual (no sobrescribir el anterior, se acaba de agregar la pregunta completa más abajo). Puede ser tan simple para hacer esto para su pregunta.
    Yo uso la fill en lugar de la multiplicación. d = np.empty(shape) y, a continuación,d.fill(np.nan). Que parece más claro para mí.

    OriginalEl autor

Dejar respuesta

Please enter your comment!
Please enter your name here