python一行用于循环返回元组的函数

时间:2017-12-04 12:17:51

标签: python loops for-loop tuples line

我已经尝试过在这个上搜索了很多,但是对于python来说相对较新我觉得我缺少必要的术语来找到我正在寻找的东西。

我有一个功能:

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

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

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))]

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

1 个答案:

答案 0 :(得分:0)

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

在越过“基于意见的”边界的边缘,...Y[i]... for i in range(len(Y))通常是Python中的一个禁忌。使用numpy数组时,它甚至是更大的禁忌。使用numpy的一个优点是它提供的'vectorization',从而将for循环推送到C级而不是(较慢的)Python级。

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