【问题标题】:python one line for loop over a function returning a tuplepython 在返回元组的函数上循环一行
【发布时间】:2018-05-17 21:49:54
【问题描述】:

我已经尝试在这方面进行了很多搜索,但是对于 python 来说相对较新,我觉得我缺少所需的术语来找到我正在寻找的东西。

我有一个函数:

def my_function(x,y):
    # code...
    return(a,b,c)

其中xy 是长度为2000 的numpy 数组,返回值是整数。我正在寻找一个速记(单行)来循环这个函数:

Output = [my_function(X[i],Y[i]) for i in range(len(Y))]

XY 的形状为 (135,2000)。但是,在运行此之后,我目前必须执行以下操作以将“输出”分成三个 numpy 数组。

Output = np.asarray(Output)
a = Output.T[0]
b = Output.T[1]
c = Output.T[2]

我觉得这不是最佳做法。我试过了:

(a,b,c) = [my_function(X[i],Y[i]) for i in range(len(Y))]

但这似乎不起作用。有谁知道快速解决我的问题的方法?

【问题讨论】:

  • 只是出于好奇,为什么你会假设单行将比“多行”“更好”(并且“更好”是指更具可读性)?不要误会我的意思,我通常喜欢单行,但不以可读性为代价。
  • 更多只是出于兴趣,我想我正在编写一个单独的项目,所以觉得这是探索其他风格的好机会。

标签: python loops for-loop tuples line


【解决方案1】:

my_function(X[i], Y[i]) for i in range(len(Y))

在跨越“基于意见”边界的边缘,...Y[i]... for i in range(len(Y)) 在 Python 中通常是一个很大的禁忌。在使用 numpy 数组时,这是一个更大的禁忌。使用numpy 的优势之一是它提供的“矢量化”,从而将for 循环推到C 级别而不是(较慢的)Python 级别。

因此,如果您重写 my_function 以便它可以使用 numpy 提供的多种工具和方法以矢量化方式处理数组,您甚至可能不需要您正在寻找的“单线”。

【讨论】:

  • 啊好吧!这听起来正是我应该研究的内容!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2018-12-08
  • 2014-04-10
  • 1970-01-01
  • 2013-03-11
  • 2019-11-13
相关资源
最近更新 更多