我在几个循环中计算蛋白质容量(空间质量作用模型)(我知道,填充一个numpy数组可能非常慢,并且有更快的方法,但它现在可以工作):
import numpy as np
a = [10,20,30] # salt concentrations tested
b = [4,5,6] # measured data points
c = 2 # number of components
q = np.empty((c,len(a),len(b)))
for ii,cs in enumerate(a):
for iii,cp in enumerate(b):
for i in range(c):
q[i,ii,iii] = cs*cp
基本上,q包含每种盐浓度下每种成分的测量数据点,并具有形状(组分数,盐浓度数,测量次数)。代码工作正常。但是,如果我只使用一个盐浓度,则行for ii,cs in enumerate(a):
不再起作用(浮动对象不可迭代)。
我可以使用if
语句。但是有更好的方法(减少令人困惑的代码)吗?
答案 0 :(得分:2)
当您使用单一盐浓度时,而不是写
a = 2
写
a = [2]
这样您就可以将其保存为列表,您的代码仍然有效。
顺便说一下,您可以使用以下NumPy单行计算q
:
In [39]: np.tile(np.outer(a, b), (c, 1, 1))
Out[39]:
array([[[ 40, 50, 60],
[ 80, 100, 120],
[120, 150, 180]],
[[ 40, 50, 60],
[ 80, 100, 120],
[120, 150, 180]]])