首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Numpy中迭代一维数组并构建一个2D数组?

如何在Numpy中迭代一维数组并构建一个2D数组?
EN

Stack Overflow用户
提问于 2012-11-18 13:26:48
回答 2查看 1.5K关注 0票数 2

如果我有一个1D的numpy.ndarray b和一个我想矢量化的Python function f,使用numpy.vectorize函数很容易:

c = numpy.vectorize(f)(a)

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

示例:

代码语言:javascript
复制
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]]),那么应该用什么来替换???

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-18 14:16:41

可以这样做:

代码语言:javascript
复制
def f_1d(x):
    return (x,x)
d = numpy.column_stack(numpy.vectorize(f_1d)(a))

将输出:

代码语言:javascript
复制
array([[1, 1],
       [2, 2],
       [3, 3]])
票数 1
EN

Stack Overflow用户

发布于 2012-11-18 13:33:20

我想你是在找reshaperepeat

代码语言:javascript
复制
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

输出:

代码语言:javascript
复制
[[1 1]
 [4 4]
 [9 9]]

您也可以直接设置array.shape元组。也许值得知道的是,如果你需要编写纯vectorize,你可以使用map来完成与vectorize相同的任务。b= numpy.vectorize(f)(a)将成为b=map(f,a)

使用这种方法,根本不需要拥有您的f_1d,因为它所做的一切似乎都是重复的信息,而numpy.repeat做得最好。

此外,这个版本的速度要快一点,但这只在处理大型数组时才重要。

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

https://stackoverflow.com/questions/13437749

复制
相关文章

相似问题

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