Ich möchte jeden Wert von 2 Matrizen (a
und b
) der gleichen Größe effizienter nehmen und eine dritte boolesche (oder 1/0-Matrix, um Dinge sauber zu machen) in Matrix c
zurückgeben, die die Ergebnisse der Bedingungen enthält.Was ist der effizienteste Weg, um jeden Wert von 2 numpy Matrizen zu vergleichen?
Beispiel:
Zustand: For a == 0 and b == 3
a = [[1 0]
[0 1]]
b = [[3 5]
[3 9]]
Würde zurück:
c = [[0 0]
[1 0]]
[0,1]
ist der einzige Ort, an dem a == 0
und b == 3
so ist es der einzige Ort True
in c
Dies ist der Code, den ich habe bisher:
import numpy as np
a = np.matrix("1, 0; 0 1")
print(a,'\n')
b = np.matrix("3, 5; 3 9")
print(b,'\n')
c = []
for x in range(0,np.shape(a)[1]):
row = []
for y in range(0,np.shape(a)[1]):
row.append(int(a[x,y] == 0 and b[x,y] == 3)) # the int() is there just to keep things tighty for the 3 prints
c.append(row)
c = np.matrix(c)
print(c)
Ergebnisse:
[[1 0]
[0 1]]
[[3 5]
[3 9]]
[[0 0]
[1 0]]
ich auch nutzen könnte:
a=a==0
b=b==3
c=a&b
Aber das würde eine Kopie von a und b zu machen und mit großen Matrizen wäre das immer noch effizient?
Warum kann ich nicht einfach a == 0 & b == 3
verwenden?
Ich muss einen Vergleich wie das für mehrere Matrizen, die 1000+ Größe sind, so dass Sie sehen konnten, wo Iterieren dachte, sie wären ziemlich langsam.
Vielen Dank für jede Hilfe Ich bin mir sicher, die Antwort ist etwas einfach und direkt vor mir, aber ich bin nur dumm.
Warum würde 'c = (a == 0) & (b == 3) .astype (int)' Kopien machen? –
"Warum kann ich nicht einfach eine == 0 & b == 3?" - nur Vorrang. Sie müssen Klammern hinzufügen, um es zu disambiguieren, wie '(a == 0) & (b == 3)'. – user2357112
@PadraicCunningham und user2357112 danke ich wusste einfach nicht, ich brauchte die Klammern – Whud