3
配列a
の形状(M1, M2, N)
と別の配列b
の形状(N,)
の間の共分散を得る必要があります。異なる形状の配列のための速い僅かな共分散
私が現在やっていることはfor
ブロック使用である:
import numpy as np
M1, M2, N = 23, 50, 117
a = np.random.uniform(-2., 2., (M1, M2, N))
b = np.random.uniform(-1., 1., N)
c = []
for i in range(M1):
for j in range(M2):
c.append(np.cov(a[i][j], b)[0, 1])
を、それは大きな(M1, M2)
のために少し遅くなります。これをスピードアップする方法はありますか?
あなたに戻って見て良いです!これらと一緒にしばらくの間、つまらないでしたが、通過することはできませんでした。 'テンソル'はテンソルの 'ドット 'よりも優れています:' np.tensordot(ac、bc、axes =((-1、-1))) '。 – Divakar
3つのオプション( 'np.einsum'、' np.dot'、 'np.tensordot')は' for'ブロックよりもずっと高速です。明らかにそれらはすべて同じように高速ですので、私は解釈するのが簡単です(私にとっては) 'np.dot'と一緒に行きます。あなたがた両方に感謝します! – Gabriel
@Divakarありがとうございました。私はあなたが今までと同じくらい多分であることを見ることができます。 –