我做了一些写作如下
new_list = ["000","122","121","230"]
for item in new_list:
r = [np.matrix([[0.5,0.5],[0,1]]),
np.matrix([[0.5,0.25],[0,1]]),
np.matrix([[0.5,0.25],[0,1]]),
np.matrix([[0.5,0],[0,1]])]
(W0,W1,W2,W3) = r
for i in item:
i == 0
if item[i] == 0:
return W0
elif item[i] == 1:
return W1
elif item[i] == 2:
return W2
else:
return W3
i = i + 1
list_new = [np.matrix([1,0]) * new_list * np.matrix([0.5],[1])]
print(list_new)
我想创建一个程序,例如当列表输入为“122”时,它会将“122”内的每个元素乘以矩阵W1 * W2 * W2。 最终结果应该是
np.matrix([1,0]) * new_list2 * np.matrix([0.5],[1])
在
new_list2
这里应该是new_list的所有乘法结果。含义
new_list2 = [W0*W0*W0,W1*W2*W2,...]
我运行此代码并继续收到语法错误
"return" outside function
我想问我在这里错过了什么,或者有其他功能/方法使用python完成它。我使用的是Python 3.5 谢谢你的回答。
答案 0 :(得分:1)
正如错误消息所示,您正在使用" return"在函数之外,这是没有意义的,因为"返回"表示"现在退出该功能并将此值(或None
,如果您没有指定值)传递给来电者"。如果您不在函数内,则没有调用者返回...
答案 1 :(得分:1)
这样的东西?
import numpy as np
from functools import reduce
new_list = ["000", "122", "121", "230"]
matrices = [
np.matrix([[0.5,0.50],[0,1]]),
np.matrix([[0.5,0.25],[0,1]]),
np.matrix([[0.5,0.25],[0,1]]),
np.matrix([[0.5,0.00],[0,1]])
]
def multiply(s):
mt_seq = (matrices[i] for i in map(int, item))
return reduce(np.multiply, mt_seq) # or reversed(mt_seq)
for item in new_list:
print(multiply(item))
您可以使用int(digit)
转换字符串中的每个数字,例如int('2')
,并使用map(int, '01234')
为字符串的每个元素执行此操作。
然后,这只是采用这些矩阵并将它们相乘的问题。 (对不起,我不熟悉np.multiply
和np.matrix
,也许您需要颠倒多重复制的顺序)
reduce(fun, seq)
将有趣的内容应用于seq,如下所示:fun(fun(fun(seq[0], seq[1]), seq[2]), ...)