迭代遍历float - 变量输入可以变为float

时间:2014-12-28 19:49:23

标签: python numpy

我在几个循环中计算蛋白质容量(空间质量作用模型)(我知道,填充一个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语句。但是有更好的方法(减少令人困惑的代码)吗?

1 个答案:

答案 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]]])