热线电话:13121318867

登录
2019-02-13 阅读量: 748
如何在执行计算时更新for循环中的变量名称

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

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我可以想象它是否打算使用 - 我想e通过使用for循环在每次迭代时更新它来计算,而我也喜欢使用numpy。

由于我所有的努力都没有结果,我转向,pandas因为我相信我可以出于任何原因赎回自己:

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还是转向pandas?

解决办法:

首先让我们离开创建大量变量名称。在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)]

工作2d阵列,形状(5,21)甚至更好。但是我所说明的那种列表迭代适用于所有Python,而不仅仅是numpy。

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

alist = [data_b1, data_b2, ...]

39.7527
2
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子