Voglio verificare se un NumPyArray contiene valori in un set e, in tal caso, impostare quell'area in un array = 1. Se non è impostato un keepRaster = 2.Verificare se i valori in un set sono in una matrice numpy in python
numpyArray = #some imported array
repeatSet= ([3, 5, 6, 8])
confusedRaster = numpyArray[numpy.where(numpyArray in repeatSet)]= 1
Resa:
<type 'exceptions.TypeError'>: unhashable type: 'numpy.ndarray'
c'è un modo per eseguire un ciclo attraverso di essa?
for numpyArray
if numpyArray in repeatSet
confusedRaster = 1
else
keepRaster = 2
Per chiarire e chiedere un ulteriore aiuto bit:
Quello che sto cercando di arrivare, e attualmente sto facendo, sta mettendo un ingresso raster in un array. Ho bisogno di leggere i valori nella matrice 2-d e creare un altro array basato su quei valori. Se il valore dell'array è in un set, il valore sarà 1. Se non è in un set, il valore sarà derivato da un altro input, ma per ora dirò 77. Questo è quello che sto attualmente usando. Il mio input di test ha circa 1500 righe e 3500 colonne. Si blocca sempre intorno 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, così come capire che. Se il valore del test è nella lista degli stati di True, che sarà = 1, altrimenti sarà uguale a quello che era. C'è un modo per rendere l'output array ([1,0,1,0,0]) – mkmitchell
@mkmitchell, sì, hai capito. È in qualche modo simile all'assegnazione delle sezioni con normali elenchi Python, ma a) utilizza il sistema di indicizzazione più complesso di numpy e b) segue la convenzione numpy che l'assegnazione di uno scalare a una porzione di un array assegna tutti i valori della sezione a quel valore scalare. – senderle
Che ne dici se si tratta di un array 2-D? – mkmitchell