gpt4 book ai didi

python - 带有矢量参数的 Numpy 数组广播

转载 作者:行者123 更新时间:2023-11-28 22:06:15 26 4
gpt4 key购买 nike

是否可以使用向量参数在 numpy 中进行数组广播?

例如,我知道我可以做到这一点

def bernoulli_fraction_to_logodds(fraction):
if fraction == 1.0:
return inf
return log(fraction / (1 - fraction))
bernoulli_fraction_to_logodds = numpy.frompyfunc(bernoulli_fraction_to_logodds, 1, 1)

并让它与整个数组一起工作。如果我有一个接受 2 元素向量并返回 2 元素向量的函数怎么办?我可以向它传递一个二元向量数组吗?例如,

def beta_ml_fraction(beta):
a = beta[0]
b = beta[1]
return a / (a + b)
beta_ml_fraction = numpy.frompyfunc(beta_ml_fraction, 1, 1)

不幸的是,这不起作用。是否有与 from_py_func 类似的功能。当它们是 2 元素向量时我可以解决这个问题,但是当它们是 n 元素向量时呢?

因此,(2,3) 的输入应该是 0.4,但是 [[2,3], [3,3]] 应该给出 [0.4, 0.5]

最佳答案

我不认为 frompyfunc 可以做到这一点,尽管我可能是错的。

关于 np.vectorize A. M. Archibald wrote :

In fact, anything that goes through python code for the "combine two scalars" will be slow. The slowness of looping in python is not because python's looping constructs are slow, it's because executing python code is slow. So vectorize is kind of a cheat - it doesn't actually run fast, but it is convenient.

所以 np.frompyfunc(和 np.vectorize)只是语法糖——它们不会让 Python 函数运行得更快。意识到这一点后,我对 frompyfunc 的兴趣下降了(几乎为零)。

Python 循环没有什么不可读的,所以要么显式地使用一个,或重写函数以真正利用 numpy(通过编写真正的矢量化方程)。

import numpy as np

def beta_ml_fraction(beta):
a = beta[:,0]
b = beta[:,1]
return a / (a + b)


arr=np.array([(2,3)],dtype=np.float)
print(beta_ml_fraction(arr))
# [ 0.4]

arr=np.array([(2,3),(3,3)],dtype=np.float)
print(beta_ml_fraction(arr))
# [ 0.4 0.5]

关于python - 带有矢量参数的 Numpy 数组广播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4024350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com