Quiero comprobar si un NumPyArray tiene valores que están en un conjunto, y si es así establecer esa área en una matriz = 1. Si no se establece un keepRaster = 2.Comprueba si los valores de un conjunto están en una matriz numpy en python
numpyArray = #some imported array
repeatSet= ([3, 5, 6, 8])
confusedRaster = numpyArray[numpy.where(numpyArray in repeatSet)]= 1
Rendimiento:
<type 'exceptions.TypeError'>: unhashable type: 'numpy.ndarray'
¿hay una forma de bucle a través de él?
for numpyArray
if numpyArray in repeatSet
confusedRaster = 1
else
keepRaster = 2
Para aclarar y pedir un poco más ayuda:
Lo que estoy tratando de llegar, y actualmente estoy haciendo, está poniendo una entrada de trama en una matriz. Necesito leer valores en la matriz de 2-d y crear otra matriz basada en esos valores. Si el valor de la matriz está en un conjunto, el valor será 1. Si no está en un conjunto, el valor se derivará de otra entrada, pero diré 77 por ahora. Esto es lo que estoy usando actualmente. Mi entrada de prueba tiene aproximadamente 1500 filas y 3500 columnas. Siempre se congela a alrededor de fila 350.
for rowd in range(0, width):
for cold in range (0, height):
if numpyarray.item(rowd,cold) in repeatSet:
confusedArray[rowd][cold] = 1
else:
if numpyarray.item(rowd,cold) == 0:
confusedArray[rowd][cold] = 0
else:
confusedArray[rowd][cold] = 2
Hmm, así como yo entiende eso. Si el valor de la prueba está en la lista de estados que es True, que será = 1, de lo contrario será igual a lo que era. Hay una manera de hacer que la salida matriz ([1,0,1,0,0]) – mkmitchell
@mkmitchell, sí, lo tienes. Es similar a la asignación de sectores con listas normales de Python, pero a) usa el sistema de indización más complejo de numpy, yb) sigue la convención numpy de que asignar un escalar a un sector de un conjunto asigna todos los valores del sector a ese valor escalar. – senderle
¿Qué tal si es una matriz 2-D? – mkmitchell