Python中map和numpy的vectorize函数返回结果不同

4

我理解的是,numpy中的向量化函数(vectorize)可以让我将一个数组发送到通常只接受标量的函数中,而不是使用内置的map函数(结合lambda函数或类似的函数)。然而,在以下情况下,当我使用map和numpy.vectorize时,我得到了不同的结果,但我似乎无法弄清楚原因。

import numpy as np

def basis2(dim, k, x):
    y = np.array([-0.2, -0.13, -0.06, 0, 0.02, 0.06, 0.15, 0.3, 0.8,
                  1.6, 3.1, 6.1, 10.1, 15.1, 23.1, 30.1, 35.0, 40.0, 45.0, 50.0, 55.0])

    if x < y[k] or x > y[k + dim + 1]:
        return 0

    elif dim != 0:
        ret = ((x - y[k]) / (y[k + dim] - y[k])) * basis2(dim - 1, k, x) + (
            (y[k + dim + 1] - x) / (y[k + dim + 1] - y[k + 1])) * basis2(dim - 1, k + 1, x)
        return ret

    else:
        return 1.0

w = np.array([20.0, 23.1, 30.0])
func = lambda x: basis2(3, 14, x)
vec = map(func, w)

func2 = np.vectorize(basis2)
vec2 = func2(3, 14, w)

print vec  # = [0, 0.0, 0.23335417007039491]
print vec2  # = [0 0 0]
1个回答

7

正如文档字符串所述:

vectorized函数的输出数据类型是通过使用输入的第一个元素来确定的。 可以通过指定otypes参数来避免这种情况。

您需要添加一个otypes参数:

func2 = np.vectorize(basis2, otypes="d")

或者在 basis2() 中将 return 0 改为 return 0.0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接