cjh*_*cjh 9 python numpy scipy
Python的风格最佳实践是否适用于科学编码?
我发现很难保持科学Python代码的可读性.
例如,建议对变量使用有意义的名称,并通过避免来保持命名空间import *
.因此,例如:
import numpy as np
normbar = np.random.normal(mean, std, np.shape(foo))
Run Code Online (Sandbox Code Playgroud)
但是这些建议可能导致一些难以阅读的代码,特别是考虑到79个字符的线宽.例如,我刚写了以下操作:
net["weights"][ix1][ix2] += lrate * (CD / nCases - opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2]))
Run Code Online (Sandbox Code Playgroud)
我可以跨越线条表达:
net["weights"][ix1][ix2] += lrate * (CD / nCases -
opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2]))
Run Code Online (Sandbox Code Playgroud)
但这似乎没有那么好,我不确定第二行缩进有多深.当一个双重缩进嵌套循环时,这些类型的行继续变得更加棘手,并且一行上只有50个字符可用.
我是否应该接受科学Python看起来很笨重,或者有没有办法避免像上面的例子那样的线条?
一些可能的方法是:
我很欣赏任何有关这些方面的信息,以及要避免哪些方面,以及对其他补救措施的建议.
\n\n\n\n
\n- 定义算术运算组合的辅助函数
\n- 将操作分成更小的部分,并在每行上放置一个
\n
这些都是好主意\xe2\x80\x94,与 PEP 8 背后的意图保持一致,并且总体上符合 Pythonic 风格。事实上,每当有人建议修改 PEP 8 以提供有关长行的更多信息时,一半的答复通常是“如果您超出行数限制,则您可能在一个表达式中执行了太多操作”。
\n\n而且,更一般地说,分解代码并为合理的操作提供合理的名称始终是一个好主意。
\n\n当然,在不确切知道所有这些东西代表什么的情况下,我只能猜测如何将它们分开,但我认为这样的东西会非常可读且有意义:
\n\ncost = opts["weightcost_pretrain"].dot(net["weights"][ix1][ix2])\nweight = lrate * (CD / nCases - cost)\nnet["weights"][ix1][ix2] += weight\n
Run Code Online (Sandbox Code Playgroud)\n