首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在返回向量的函数上使用Numpy Vectorize

在返回向量的函数上使用Numpy Vectorize
EN

Stack Overflow用户
提问于 2010-08-01 02:20:10
回答 4查看 81.6K关注 0票数 51

numpy.vectorize接受函数f:a->b并将其转换为g:a[]->b[]。

ab是标量时,这很好用,但我想不出为什么它不能将b用作ndarray或list,即f:a->b[]和g:a[]->b

例如:

代码语言:javascript
复制
import numpy as np
def f(x):
    return x * np.array([1,1,1,1,1], dtype=np.float32)
g = np.vectorize(f, otypes=[np.ndarray])
a = np.arange(4)
print(g(a))

这会产生以下结果:

代码语言:javascript
复制
array([[ 0.  0.  0.  0.  0.],
       [ 1.  1.  1.  1.  1.],
       [ 2.  2.  2.  2.  2.],
       [ 3.  3.  3.  3.  3.]], dtype=object)

好的,这给出了正确的值,但是错误的数据类型。更糟的是:

代码语言:javascript
复制
g(a).shape

收益率:

代码语言:javascript
复制
(4,)

所以这个数组几乎是无用的。我知道我可以把它转换成:

代码语言:javascript
复制
np.array(map(list, a), dtype=np.float32)

给我我想要的:

代码语言:javascript
复制
array([[ 0.,  0.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  1.,  1.],
       [ 2.,  2.,  2.,  2.,  2.],
       [ 3.,  3.,  3.,  3.,  3.]], dtype=float32)

但这既不是有效的,也不是pythonic式的。你们谁能找到一种更干净的方法来做这件事?

提前感谢!

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3379301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档