【问题标题】:Nested list comprehension for numpynumpy 的嵌套列表理解
【发布时间】:2019-03-20 14:29:36
【问题描述】:

我有一个似乎无法解决的问题。

我正在从文件的行(每行 100 行,每行 30 个值)构建一个形状为 (100, 30) 的 numpy 数组,并且我需要将此数组制作成一个形状 (100, ),其值为平均值n 个来自原始数组每一行的最后一个值。

我的目标是在一行中执行此操作,因此我尝试了嵌套列表推导,但我觉得完全迷失在那里,我不确定自己在做什么。

这是我到目前为止得到的,这给了我一个正确的形状数组,但(我相信)错误的值。

def perf_n_last(n):
    a = np.array([np.mean([i for j in range(len(i)-1, len(i)-(n+1), -1)]) for i in np.loadtxt('myfile.txt')])
    print(a.shape) #outputs (100, )

输入和输出应如下所示:

input_f = [[1. 2. 3. 4. 5.]
           [2. 3. 4. 5. 6.]
           [3. 4. 5. 6. 7.]]
#We assume n = 2
output_f = [4.5 5.5 6.5]

我也愿意接受有关列表切片的建议。感谢您的帮助!

【问题讨论】:

  • 您能否分享一个较小的数据样本和预期的输出,以便重现它?
  • 你为什么要求这个只用完一行?与打开包装相比,您所拥有的东西更不容易辨认。
  • 为什么不直接从文件中创建 (100,30) 数组然后取其平均值?
  • @acdr 你完全正确,这是来自同学的挑战,不是一个好主意。

标签: python numpy list-comprehension


【解决方案1】:

如果我正确理解您的问题,这实际上可以使用 numpy 快速完成,假设 2d 数组中的每一行长度相同:

def perf_n_last(n):
    return np.loadtxt("myfile.txt")[:,-n:].mean(1)

加载文件,切片以包含所有行,但仅包含 n 最后一列,并取每个结果行的平均值。

【讨论】:

  • 非常感谢,我被列表理解迷住了,没有看到这个解决方案
  • 你就不能写np.mean(np.loadtxt("myfile.txt")[:,-n:])吗?
  • @Bazingaa,这将采用数组的整体平均值,而不是每行的平均值。
  • @mackenziedg:你可以通过axis=1 我认为是明智的做法
猜你喜欢
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-20
相关资源
最近更新 更多