У меня есть следующая программаДать три для петель в одну линию (питон)
import numpy as np
X = np.asarray([ [2,3,4,5,1,1,1],
[1,2,3,4,1,1,1],
[3,3,3,3,1,1,1]])
Nrows=X.shape[0]
Ncols1=X.shape[1]
cols=np.asarray([[1,3]])
Ncols2=cols.shape[1]
Y = np.ndarray(shape=(Nrows,Ncols2))
for i in range(Nrows):
for j in range(Ncols2):
sum=0
for k in range(Ncols1):
sum=sum+np.exp(-(X[i,k]-X[i,cols[0,j])**2)
Y[i,j]=sum
Я хочу, чтобы уменьшить три петли в одну линию. Мотивация здесь частично для ускорения рассмотрения и частично для практических навыков питона.
Так что я могу превратить его в две петли, записывая его как:
for i in range(Nrows):
for j in range(Ncols1):
Y[i,j]=np.sum(np.exp(-(X[i,]-X[i,cols[0,j]])**2))
И я могу превратить его в одну петлю, написав его как:
for i in range(Nrows):
Y[i,]=map(lambda j: np.sum(np.exp(-(X[i,]-X[i,cols[0,j]])**2)),range(Ncols2))
Но я не могу понять, как превратить это в одну строку. Мой инстинкт попробовать
Y[:,]=map(lambda j: np.sum(np.exp(-(X[:,]-X[:,cols[0,j]])**2)),range(Ncols2))
Но это терпит неудачу с «ValueError: операнды не могут передаваться вместе с формами (3,7) (3,)»
Любая помощь будет очень высоко ценится.
-Nick
Я не уверен, будет ли конденсировать ваши петли в одну линию, будет более эффективной или нет. Но я уверен, что у вас будет очень запутанный беспорядок. –
Я согласен с тем, что сказал @leaf – alfasin
Не пишите коды, которые вы не можете понять. что микрооптимизация не поможет. плохая практика –