2

如果我有一个要矢量化的 1Dnumpy.ndarray b和一个 Python function f,则使用该numpy.vectorize函数非常容易:

c = numpy.vectorize(f)(a).

但是如果f返回一维numpy.ndarray而不是标量,我该如何构建二维numpy.ndarray呢?(也就是说,我希望numpy.ndarray从返回的每个 1Df成为新 2D 中的一行numpy.ndarray。)

例子:

def f(x):
    return x * x

a = numpy.array([1,2,3])
c = numpy.vectorize(f)(a)

def f_1d(x):
    return numpy.array([x, x])

a = numpy.ndarray([1,2,3])
d = ???(f_1d)(a)

在上面的例子c中会变成array([1, 4, 9]). 什么应该???替换为 ifd应该成为array([[1, 1], [2, 2], [3, 3]])

4

2 回答 2

1

可以这样做:

def f_1d(x):
    return (x,x)
d = numpy.column_stack(numpy.vectorize(f_1d)(a))

将输出:

array([[1, 1],
       [2, 2],
       [3, 3]])
于 2012-11-18T06:16:40.657 回答
0

我认为您正在寻找重塑重复

def f(x):
    return x * x
a = numpy.array([1,2,3])
b= numpy.vectorize(f)(a)
c = numpy.repeat(b.reshape( (-1,1) ),2, axis=1)
print c

输出:

[[1 1]
 [4 4]
 [9 9]]

您也可以直接设置 array.shape 元组。如果您需要编写纯 python ,可能值得知道您可以完成与vectorizeusing相同的操作。会成为mapb= numpy.vectorize(f)(a)b=map(f,a)

使用这种方法,完全没有必要拥有您f_1d的信息,因为它似乎所做的只是重复信息,而numpy.repeat.

此外,此版本要快一些,但这仅在您处理大型数组时才重要。

于 2012-11-18T05:33:19.500 回答