通过浮点变量输入进行迭代可以改变

2024-09-30 20:39:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在计算几个循环中的蛋白质容量(空间质量作用模型)(我知道,填充一个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):行就不再工作了(float对象是不可iterable的)。你知道吗

我可以使用if语句。但是有没有更好的方法(代码不那么混乱)?你知道吗


Tags: 方法innumpyfor数量lennp蛋白质
1条回答
网友
1楼 · 发布于 2024-09-30 20:39:13

当你用单一的盐浓度,而不是写作

a = 2

a = [2]

这样你就可以把它作为一个列表,你的代码仍然可以工作。你知道吗

顺便说一下,您可以使用以下NumPy one liner计算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]]])

相关问题 更多 >