나는 다음과 같은 한 :python/numpy - 다음 예제에서 einsum을 사용하는 방법?
sum_XY C_x I_xk 싸이 I_yl P_xy는
현재 내 코드는 다음과 같습니다
# initialise dummy values
Nk = Nl = 100
NX = Ny = 10
Ix = np.random.rand(Nx, Nk)
Iy = np.random.rand(Ny, Nl)
C = np.random.rand(Nk)
Pin = np.ones(Nx*Ny)
# point 1
Fx = (Ix * C[np.newaxis, :Nk]).T # <- this part may be unavoidable due to using arbitrary precision for Ix, Iy
Fy = (Iy * C[np.newaxis, :Nl]).T # <- this part may be unavoidable due to using arbitrary precision for Ix, Iy
# point 2
H = Fx[:, np.newaxis, :, np.newaxis] * Fy[np.newaxis, :, np.newaxis, :]
H = H.reshape([Nk*Nl, Nx*Ny])
out = np.dot(H, Pin)
out.shape = [Nk, Nl]
# end
내가
np.einsum
와 위를 할 수 있다면 나는 '나는 어떻게 든 궁금
나는 H를 만들려고 할 때마다했습니다는
추가 정보가 필요하면 알려 주시기 바랍니다 ... 너무 많은 메모리를 사용하여 끝났다.
EDIT : 그것은 단지 einsum 이후 point 2
에서 효과적으로 사용될 수있는 경우 일 수있다
인해 수치 정밀도에 관한 것이다. 그래서 질문은 내가 끝날 때까지 끝까지 point 1
에서와 point 2
에서 einsum
와 코드를 대체 할 수있는 방법이된다.
흠 ... 그래서 내가 '사용 np.einsum 결국 한 ('KX는, LY, xy-은> KL ', FX는, 년도, Pin.reshape ([Nx를, 뉴욕])'와이 상당한 금액을 절약 할 수 속도면에서 볼 때 행렬 곱셈을 할 때와 같이 고속 일 것이라고 예상 할 수 있습니까? 또는 이렇게하면 H를 생성하지 않아도됩니다. – evan54