gpt4 book ai didi

python - Numpy向量化二维数组运算错误

转载 作者:行者123 更新时间:2023-12-01 02:48:27 25 4
gpt4 key购买 nike

我试图在 numpy 行方向的二维数组上应用向量化函数,并且遇到 ValueError:使用序列设置数组元素。

import numpy as np

X = np.array([[0, 1], [2, 2], [3, 0]], dtype=float)
coeffs = np.array([1, 1], dtype=float)

np.apply_along_axis(
np.vectorize(lambda row: 1.0 / (1.0 + np.exp(-coeffs.dot(row)))),
0, X
)

我完全不知道如何解释这个错误。如何设置带有序列的数组元素?

当我在单行上测试 lambda 函数时,它可以工作并返回一个 float 。不知何故,它在这个向量化函数的范围内失败了,这让我相信向量化函数是错误的,或者我没有正确使用 apply_along_axis

在这种情况下是否可以使用向量化函数?如果是这样,怎么办?向量化函数可以接受数组还是我误解了文档?

最佳答案

您正在将 X 的第二个轴与 coeffs 的唯一轴进行求和。因此,您可以简单地使用 np.dot(X,coeffs) 进行 sum-reductions

因此,矢量化解决方案是 -

1.0 / (1.0 + np.exp(-X.dot(coeffs)))

示例运行 -

In [227]: X = np.array([[0, 1], [2, 2], [3, 0]], dtype=float)
...: coeffs = np.array([1, 1], dtype=float)
...:

# Using list comprehension
In [228]: [1.0 / (1.0 + np.exp(-coeffs.dot(x))) for x in X]
Out[228]: [0.7310585786300049, 0.98201379003790845, 0.95257412682243336]

# Using proposed method
In [229]: 1.0 / (1.0 + np.exp(-X.dot(coeffs)))
Out[229]: array([ 0.73105858, 0.98201379, 0.95257413])

使用np.apply_along_axis的正确方法是删除np.vectorize并沿X的第二个轴应用它,即X 的每一行 -

np.apply_along_axis(lambda row: 1.0 / (1.0 + np.exp(-coeffs.dot(row))), 1,X)

关于python - Numpy向量化二维数组运算错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45067268/

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