Ich habe eine numpy 2-d Heatmap und zwei überlappende Masken (mit verschiedenen Größen). Ich möchte die Elemente innerhalb dieser Masken mit einem eindeutigen numpy Array pro Maske multiplizieren. Zuerst entferne ich die überlappenden Koordinaten von einer der Masken. Dann möchte ich die Heatmap-Elemente pro Maske extrahieren, ohne Schleifen zu verwenden.Numpy 2-d Elemente pro Maske separat auswählen und multiplizieren (ohne Schleifen)
Der Grund dafür ist, dass ich in Wirklichkeit über 10000 Masken habe, aus denen sich eine variable Zahl überschneidet. Außerdem habe ich 25 Heatmaps mit einer Größe von 80000 * 80000. Die Herausforderung besteht darin, mit diesen Zahlen einen Alorithmus zu erstellen, der schnell und nicht zu speicherintensiv ist.
Beispiel Heatmap:
heatmap = array([[236, 235, 225, 226, 215],
[214, 217, 220, 215, 228],
[238, 227, 209, 210, 220],
[251, 224, 225, 220, 229],
[ 0, 226, 231, 233, 240]], dtype=uint64)
Boolean Masken:
bool1=array([[ True, True, True, True, False],
[ True, True, True, True, False],
[ True, True, True, True, False],
[ True, True, True, False, False],
[False, False, False, False, False]], dtype=bool)
bool2=array([[False, False, False, False, False],
[False, False, False, True, False],
[False, False, True, True, True],
[False, False, True, True, True],
[False, False, True, True, True]], dtype=bool)
entfernen Koordinaten von der zweiten Maske überlappende:
bool2[bool1]=False
Im Moment habe ich die Heatmap Elemente pro Maske wie folgt auswählen :
combined_bool=[bool1,bool2]
multiply_array1=np.array([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15])
multiply_array2=np.array([1,2,3,4,5,6]) #only 6 Trues in bool2 after duplicate cell removal
combined_mult= [multiply_array1,multiply_array2]
for i in range(0,len(combined_bool)):
mask=combined_bool[i]
heatmap[mask]=heatmap[mask]*combined_mult[i]
#output
array([[ 236, 470, 675, 904, 215],
[1070, 1302, 1540, 1720, 228],
[2142, 2270, 2299, 2520, 220],
[3263, 3136, 3375, 440, 687],
[ 0, 226, 924, 1165, 1440]], dtype=uint64)
Wie kann ich diese Multiplikation pro Maske ohne die Verwendung einer For-Schleife machen?
Wie viele überlappende Masken arbeiten Sie in Ihrem tatsächlichen Fall? – Divakar
Dies ist eine variable Zahl, ich habe auch mehrere Heatmaps. –
Ich meinte typisch. Weil das "len (combined_bool)" entscheiden würde und wenn das eine kleine Zahl ist, lohnt es sich nicht, die Vektorisierung zu machen. – Divakar