Ich habe das folgende mehrdimensionale Array. Die erste Achse bezeichnet einen 3-dimensionalen Vektor. Ich möchte die 3-mal-3-Matrix xx 'für jeden der diejenigen berechnen.Wie verwende ich Broadcasting, um diesen Code zu beschleunigen?
Meine aktuelle Lösung:
arr.shape
# (3, 64, 64, 33, 187)
dm = arr.reshape(3,-1)
dm.shape
# (3, 25276416)
cov = np.empty((3,3,dm.shape[1]))
cov.shape
# (3, 3, 25276416)
dies für-Schleife iteriert über alle 25.276.416 Elemente und dauert etwa 1 oder 2 min.
for i in range(dm.shape[1]):
cov[...,i] = dm[:,i].reshape(3,1).dot(dm[:,i].reshape(1,3))
cov = cov.reshape((3,) + arr.shape)
cov.shape
# (3, 3, 64, 64, 33, 187)