2017-05-10 6 views
0

어떻게 효율적으로

A = np.random.rand(20,200) 
x= np.random.rand(20) 
y= np.random.rand(20) 
num= np.zeros(20) 
for i in range (A.shape[0]): 
    num[i] = np.sum(A.T[i,:].dot(x[i]+y[i])) 
print num 

당신이 사용할 수있는 루프

+1

'A'의 열을 따라 반복자를 'A'의 열을 따라 반복하기 때문에 'for i in range (A.shape [1]) :'이 아닌가? – Divakar

+0

'num = np.zeros (20)'만 필요할 것 같습니까? –

+3

질문은 왜 스칼라 곱셈을하기 위해'점 '을 사용하고 있습니까? 'x [i] + y [i]'는 스칼라이다. –

답변

1

에 대한없이 납입을 찾을 수있는 방법이 있나요 내적의 합을받을 수 있나요 효율적으로 NumPy와 np.einsum -

num = np.einsum('ji,i->i',A[:,:20],x+y) 

너비가 A.T 인 행을 따라 A.T[i,:], 즉의 열로 반복하고 있기 때문에 그 슬라이스는 [:,:20]이어야합니다., 모든 열을 반복하지 않습니다.

+0

처음으로 A.shape [0]이 잘못 작성되었습니다. x와 y는 (20)이 아닙니다. (200) –

+0

@AyaAbdelsalam 수정 된 코드. – Divakar

+0

완벽하게 작동합니다. 감사합니다. –