如果我有1D numpy.ndarray
b
和Python function
f
我想要进行矢量化,那么使用numpy.vectorize
函数非常容易:
c = numpy.vectorize(f)(a)
。
但如果f
返回1D numpy.ndarray
而不是标量,我该如何构建2D numpy.ndarray
呢? (也就是说,我希望从numpy.ndarray
返回的每个1D f
成为新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])
。如果???
成为d
,应该array([[1, 1], [2, 2], [3, 3]])
替换什么?
答案 0 :(得分:1)
可以这样做:
def f_1d(x):
return (x,x)
d = numpy.column_stack(numpy.vectorize(f_1d)(a))
将输出:
array([[1, 1],
[2, 2],
[3, 3]])
答案 1 :(得分: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元组。
可能值得知道,您可以使用vectorize
完成相同的工作,{strong>如果您需要编写纯python。 map
将成为b= numpy.vectorize(f)(a)
使用这种方法,根本不需要使用b=map(f,a)
,因为它似乎只是重复信息,f_1d
最好这样做。
此外,这个版本的速度要快一些,但这只是在处理大型数组时才有意义。