Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在执行计算时更新for循环中的变量名_Python_Python 3.x_Pandas_Numpy - Fatal编程技术网

Python 在执行计算时更新for循环中的变量名

Python 在执行计算时更新for循环中的变量名,python,python-3.x,pandas,numpy,Python,Python 3.x,Pandas,Numpy,每当我在Python中偶然发现某种计算时,我倾向于使用非Python的方法,因为我对该语言不太熟悉: import pandas as pd import numpy as np v = 8 gf = 2.5 data_a1 = np.random.randint(5, 10, 21) data_a2 = np.random.randint(5, 10, 21) data_a3 = np.random.randint(5, 10, 21) data_a4 =

每当我在Python中偶然发现某种计算时,我倾向于使用非Python的方法,因为我对该语言不太熟悉:

import pandas as pd
import numpy as np

v        = 8
gf       = 2.5

data_a1  = np.random.randint(5, 10, 21)
data_a2  = np.random.randint(5, 10, 21)
data_a3  = np.random.randint(5, 10, 21)
data_a4  = np.random.randint(5, 10, 21)
data_a5  = np.random.randint(5, 10, 21)

data_b1  = np.random.randint(6, 11, 21)
data_b2  = np.random.randint(6, 11, 21)
data_b3  = np.random.randint(6, 11, 21)
data_b4  = np.random.randint(6, 11, 21)
data_b5  = np.random.randint(6, 11, 21)

e_1 = 2 * (data_a1 + data_b1) / 2 / v / gf
e_2 = 2 * (data_a2 + data_b2) / 2 / v / gf
e_3 = 2 * (data_a3 + data_b3) / 2 / v / gf
e_4 = 2 * (data_a4 + data_b4) / 2 / v / gf
e_5 = 2 * (data_a5 + data_b5) / 2 / v / gf
正如您从上面的示例中看到的,我将它显式地写了五次,而不是像我想象的那样使用Python—我希望通过使用for循环在每次迭代中更新它来计算e,我也更希望使用numpy

由于我所有的努力都没有结果,我转向熊猫,因为我相当有信心,无论出于什么原因,我都可以救赎自己:

df_a     = pd.DataFrame({'data_a1': data_a1, 'data_a2': data_a2, 'data_a3': data_a3, 'data_a4': data_a4, 'data_a5': data_a5})
df_b     = pd.DataFrame({'data_b1': data_b1, 'data_b2': data_b2, 'data_b3': data_b3, 'data_b4': data_b4, 'data_b5': data_b5})

c   = 0
dfs = []
for i,j in zip(df_a, df_b):
    e = 2 * (i + j) / 2 / v / gf
    e = e.add_suffix('_' + str(c))
    dfs.addpend(e)
    c += 1
唉,我的愚蠢占了上风,两种方式我都做不到

是否有一种使用numpy处理方程的简化方法,以便变量在被视为pythonic的for循环中进行自我更新? 在执行这些任务时,是否建议坚持使用numpy或转向熊猫?
我可能误解了你的意图,但据我所知,你并没有取舍或查找任何东西,所以没有理由从裸体变成熊猫,而熊猫只是一个非常漂亮的裸体阵列。相反,您应该查看numpy提供的矢量化操作

再说一次,我不清楚你的最终目标,因为你没有;无法提供输出,但这是否接近您所追求的目标

v        = 8
gf       = 2.5
a=np.random.randint(5,10,(21,5))
b=np.random.randint(5,10,(21,5))
c=2*(a+b)/2/v/gf

c

array([[0.9 , 0.75, 0.75, 0.6 , 0.65],
       [0.75, 0.65, 0.5 , 0.9 , 0.75],
       [0.7 , 0.6 , 0.75, 0.75, 0.85],
       [0.6 , 0.6 , 0.7 , 0.8 , 0.7 ],
       [0.6 , 0.75, 0.9 , 0.8 , 0.8 ],
       [0.85, 0.65, 0.65, 0.7 , 0.65],
       [0.65, 0.65, 0.65, 0.55, 0.7 ],
       [0.5 , 0.7 , 0.7 , 0.55, 0.6 ],
       [0.65, 0.6 , 0.8 , 0.9 , 0.7 ],
       [0.65, 0.7 , 0.55, 0.6 , 0.8 ],
       [0.75, 0.55, 0.75, 0.7 , 0.65],
       [0.8 , 0.7 , 0.65, 0.7 , 0.55],
       [0.55, 0.8 , 0.6 , 0.6 , 0.7 ],
       [0.8 , 0.75, 0.7 , 0.85, 0.7 ],
       [0.7 , 0.55, 0.75, 0.7 , 0.55],
       [0.6 , 0.7 , 0.7 , 0.6 , 0.65],
       [0.55, 0.8 , 0.7 , 0.6 , 0.75],
       [0.65, 0.75, 0.7 , 0.65, 0.6 ],
       [0.8 , 0.85, 0.7 , 0.8 , 0.7 ],
       [0.85, 0.8 , 0.55, 0.6 , 0.8 ],
       [0.8 , 0.8 , 0.75, 0.7 , 0.7 ]])

我可能误解了你的意图,但据我所知,你并没有取舍或查找任何东西,所以没有理由从裸体变成熊猫,而熊猫只是一个非常漂亮的裸体阵列。相反,您应该查看numpy提供的矢量化操作

再说一次,我不清楚你的最终目标,因为你没有;无法提供输出,但这是否接近您所追求的目标

v        = 8
gf       = 2.5
a=np.random.randint(5,10,(21,5))
b=np.random.randint(5,10,(21,5))
c=2*(a+b)/2/v/gf

c

array([[0.9 , 0.75, 0.75, 0.6 , 0.65],
       [0.75, 0.65, 0.5 , 0.9 , 0.75],
       [0.7 , 0.6 , 0.75, 0.75, 0.85],
       [0.6 , 0.6 , 0.7 , 0.8 , 0.7 ],
       [0.6 , 0.75, 0.9 , 0.8 , 0.8 ],
       [0.85, 0.65, 0.65, 0.7 , 0.65],
       [0.65, 0.65, 0.65, 0.55, 0.7 ],
       [0.5 , 0.7 , 0.7 , 0.55, 0.6 ],
       [0.65, 0.6 , 0.8 , 0.9 , 0.7 ],
       [0.65, 0.7 , 0.55, 0.6 , 0.8 ],
       [0.75, 0.55, 0.75, 0.7 , 0.65],
       [0.8 , 0.7 , 0.65, 0.7 , 0.55],
       [0.55, 0.8 , 0.6 , 0.6 , 0.7 ],
       [0.8 , 0.75, 0.7 , 0.85, 0.7 ],
       [0.7 , 0.55, 0.75, 0.7 , 0.55],
       [0.6 , 0.7 , 0.7 , 0.6 , 0.65],
       [0.55, 0.8 , 0.7 , 0.6 , 0.75],
       [0.65, 0.75, 0.7 , 0.65, 0.6 ],
       [0.8 , 0.85, 0.7 , 0.8 , 0.7 ],
       [0.85, 0.8 , 0.55, 0.6 , 0.8 ],
       [0.8 , 0.8 , 0.75, 0.7 , 0.7 ]])

首先,让我们远离创建大量变量名。在Python中,列表可以包含其他对象,包括数组

datalist1 = []
for _ in range(5):
    datalist1.append(np.random.randin(5, 10, 21))
# same for datalist2
datalist2 = [np.random.randint(6, 11, 21), 
             np.random.randint(6, 11, 21),
            ...]

elist = [2*(a+b)/2/v/gf for a,b in zip(datalist1, datalist2)]
使用形状为5,21的二维阵列甚至更好。但是我演示的列表迭代适用于所有Python,而不仅仅是numpy

您甚至可以从预先存在的变量中创建一个列表:

alist = [data_b1, data_b2, ...]

首先,让我们远离创建大量变量名。在Python中,列表可以包含其他对象,包括数组

datalist1 = []
for _ in range(5):
    datalist1.append(np.random.randin(5, 10, 21))
# same for datalist2
datalist2 = [np.random.randint(6, 11, 21), 
             np.random.randint(6, 11, 21),
            ...]

elist = [2*(a+b)/2/v/gf for a,b in zip(datalist1, datalist2)]
使用形状为5,21的二维阵列甚至更好。但是我演示的列表迭代适用于所有Python,而不仅仅是numpy

您甚至可以从预先存在的变量中创建一个列表:

alist = [data_b1, data_b2, ...]

那么,如果提供更多信息,那么:

#simulate getting new data every day for a week
n_days   = 7

#set constants
v        = 8
gf       = 2.5
data_dict={}
#append data
for i in range(n_days+1):
    a=np.random.randint(5,10,21)
    b=np.random.randint(5,10,21)
    data_dict['dayN+'+str(i)]=2*(a+b)/2/v/gf #instead of str(i), you could append the key with datetime.now(), etc.

data_dict

{'dayN+0': array([0.275, 0.275, 0.4  , 0.3  , 0.325, 0.425, 0.4  , 0.45 , 0.3  ,
        0.375, 0.375, 0.35 , 0.425, 0.35 , 0.4  , 0.325, 0.3  , 0.3  ,
        0.35 , 0.3  , 0.375]),
 'dayN+1': array([0.3  , 0.275, 0.325, 0.375, 0.4  , 0.425, 0.325, 0.325, 0.4  ,
        0.35 , 0.3  , 0.4  , 0.375, 0.25 , 0.375, 0.375, 0.45 , 0.35 ,
        0.425, 0.35 , 0.4  ]),
 'dayN+2': array([0.4...

那么,如果提供更多信息,那么:

#simulate getting new data every day for a week
n_days   = 7

#set constants
v        = 8
gf       = 2.5
data_dict={}
#append data
for i in range(n_days+1):
    a=np.random.randint(5,10,21)
    b=np.random.randint(5,10,21)
    data_dict['dayN+'+str(i)]=2*(a+b)/2/v/gf #instead of str(i), you could append the key with datetime.now(), etc.

data_dict

{'dayN+0': array([0.275, 0.275, 0.4  , 0.3  , 0.325, 0.425, 0.4  , 0.45 , 0.3  ,
        0.375, 0.375, 0.35 , 0.425, 0.35 , 0.4  , 0.325, 0.3  , 0.3  ,
        0.35 , 0.3  , 0.375]),
 'dayN+1': array([0.3  , 0.275, 0.325, 0.375, 0.4  , 0.425, 0.325, 0.325, 0.4  ,
        0.35 , 0.3  , 0.4  , 0.375, 0.25 , 0.375, 0.375, 0.45 , 0.35 ,
        0.425, 0.35 , 0.4  ]),
 'dayN+2': array([0.4...

谢谢你的回复,G.安德森。我创建了随机变量作为示例,而在现实生活中,我使用的是在实验室环境中获取的数据。因为我在不同的时间执行相同的测量,所以我想区分数组,并使用某种后缀来更新它们。很抱歉我的解释不好。看到我的补充答案了吗?也许更接近你的意图?谢谢你的回答,G.安德森。我创建了随机变量作为示例,而在现实生活中,我使用的是在实验室环境中获取的数据。因为我在不同的时间执行相同的测量,所以我想区分数组,并使用某种后缀来更新它们。很抱歉解释得不好。看到我的补充答案了吗?也许更接近你的意图?谢谢玩具的回复,hpaulj。如果我的问题有误导性,我很抱歉。随机阵列是作为一个例子创建的,但实际上,我使用的是在不同时间采集的实验室数据。这就是为什么我想通过添加某种后缀来区分变量。您是否建议我将所有数据存储在一个数组中,然后对列表本身执行计算?您仍然可以使用列表或字典。例如,您可以有一个“时间”列表。但如果实际上你有一个或多个时间序列,那么熊猫可能是你的选择。我回答的重点是用列表替换一大堆变量名。感谢toy的回复,hpaulj。如果我的问题有误导性,我很抱歉。随机阵列是作为一个例子创建的,但实际上,我使用的是在不同时间采集的实验室数据。这就是为什么我想通过添加某种后缀来区分变量。您是否建议我将所有数据存储在一个数组中,然后对列表本身执行计算?您仍然可以使用列表或字典。例如,您可以有一个“时间”列表。但如果实际上你有一个或多个时间序列,那么熊猫可能是你的选择。我回答的重点是用列表替换一大堆变量名。