【问题标题】:Is there a way to write this piece of code smartly?有没有办法巧妙地编写这段代码?
【发布时间】:2021-10-18 20:38:12
【问题描述】:

我正在为一个数据集编写代码,其中包含 7 个不同的数据集,a1,a2,...,a7。每个数据集的维度不同。我想计算相关矩阵,然后得到它们的平均值。

A1 = get_corr(a1)
A2 = get_corr(a2)
A3 = get_corr(a3)
A4 = get_corr(a4)
A5 = get_corr(a5)
A6 = get_corr(a6)
A7 = get_corr(a7)

A_mean = [np.mean(A1),np.mean(A2),np.mean(A3),
             np.mean(A4),np.mean(A5),np.mean(A6),
             np.mean(A7)]

有没有办法更聪明地写这篇文章? 附言。我想一种方法是输入A=[a_1,a_2,...,a_7],然后使用while循环

A_c = []
for i in len(A):
    A_c.append(get_corr(A[i]))
A_mean =[]
for i in len(A_c):
    A_mean.append(np.mean(A_c[i])

如果您认为它聪明与否,我将不胜感激?

【问题讨论】:

  • data = [a1,a2,a3,a4,a5,a6,a7]; A_mean = [np.mean(get_corr(a)) for a in data]?
  • 是的,使用列表是替换编号变量的一种聪明方法。
  • 不要使用名为A1a1A2 等的变量。创建名为Aa 的列表。然后你可以做for i, v in enumerate(a): A[i] = get_corr(v)

标签: python list loops append


【解决方案1】:

我可以想到两种可能的方法:
第一,使用多个赋值:

A1,A2,A3,A4,A5,A6,A7 = get_corr(a1),get_corr(a2),get_corr(a3),get_corr(a4),get_corr(a5),get_corr(a6),get_corr(a7)
A_mean = [np.mean(A1),np.mean(A2),np.mean(A3),
             np.mean(A4),np.mean(A5),np.mean(A6),
             np.mean(A7)]

第二个(也是更 Pythonic 的)是列表理解:

items = [a1,a2,a3,a4,a5,a6,a7]
corrs = [ get_corr(item) for item in items]
means = [ np.mean(corr) for corr in corrs]

【讨论】:

  • 感谢您的明智建议,但我还有一个问题?如果我想从我的数据中引导进行多次明确的迭代怎么办。例如,A_all = [] for t in range(len(items)): A_BS = [] for i in range(iter): idx_BS = np.random.choice(np.shape(items[0])[1], boots) A_BS.append(get_corr((items[t][:,idx_BS]).T)) A_all.append(A_BS)?其中 iter 是我们想要引导的次数,而 boots 是行数是引导的每次迭代。我们也可以更聪明地写这个吗,或者这里没有?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多