有没有办法将函数应用于 pyhton 中的列表数组?

Is there any way to apply a function to an array of lists in pyhton?

提问人:Dazckel 提问时间:4/16/2022 最后编辑:Dazckel 更新时间:4/16/2022 访问量:101

问:

我有一个包含两个坐标的列表数组。 我想应用这个功能:

def f(x, y, a, b):
return sign(y - a*x - b)

其中 x 和 y 是坐标,a 和 b 定义线方程。

该函数返回直线和点之间距离的符号。

有没有办法一次将此函数应用于列表数组并获取标签列表?喜欢:

Y = f(x[:,0],x[:,1],a,b)

谢谢

python numpy

评论

1赞 Michael Szczesny 4/17/2022
如果数组是,并且您使用该函数将按预期工作。np.ndarraynp.sign
0赞 hpaulj 4/17/2022
你试过吗?(什么是? numpy?f(x[:,0],x[:,1],a,b)sign

答:

0赞 Remzak Kacper 4/16/2022 #1

你的意思是,映射调用函数对可迭代的每个元素map()

例如:

def f(x):
  return x**2

lst = [1,2,3,4,5]

print(tuple(map(f, lst)))

输出:

(1,4,9,16,25)

*非常重要 map 返回生成器,因此您需要使用 或从 map 获取值tuple()list()

3赞 eshirvana 4/16/2022 #2

你可以使用 numpy :vectorize

vectorize定义一个向量化函数,该函数将嵌套的对象序列或 numpy 数组作为输入,并返回单个 numpy 数组或 numpy 数组的元组。矢量化函数像 python map 函数一样,在输入数组的连续元组上计算 pyfunc,但它使用 numpy 的广播规则。

在此处阅读有关 numpy.vectorize 的更多信息

def f(x, y, a, b):
    return np.sign(y - a*x - b)
vfunc = np.vectorize(f)

输出:

x = np.random.rand(10,10)
y = np.random.rand(10,10)
Y = vfunc(x[:,0],y[:,1],1,0)
print(Y)

>> [-1.  1.  1. -1. -1. -1. -1.  1. -1. -1.]

评论

1赞 hpaulj 4/17/2022
Y1 = f(x[:,0],y[:,1],1,0)做同样的事情,并且速度快 6 倍(对于此示例)。
0赞 eshirvana 4/17/2022
@hpaulj真的!!