首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将一维numpy数组克隆为三维时的维度顺序问题

将一维numpy数组克隆为三维时的维度顺序问题
EN

Stack Overflow用户
提问于 2018-12-04 07:39:29
回答 2查看 39关注 0票数 1

我很难找到克隆一维numpy数组来创建三维数组的方法。比如说,我有

代码语言:javascript
运行
复制
z = np.array([0, 2, 3, 5, 7, 9, 10])

这表示三维空间中的垂直列(例如,以米为单位)。我想要创建一个水平维(x,y),这样最终的数组就有维度(len(z), len(x), len(y)),其中每个x,y点上的每一列都是相同的。我这样做是为了使空间维数与我所拥有的其他三维数据相匹配。

因此,以数组z作为输入,并给定ndimx=3、ndimy=2的水平维,我希望找到一个输出数组的函数。

代码语言:javascript
运行
复制
np.array([ [[0, 0], [0, 0], [0, 0]],  
           [[2, 2], [2, 2], [2, 2]],       
           [[3, 3], [3, 3], [3, 3]],       
           [[5, 5], [5, 5], [5, 5]],       
           [[7, 7], [7, 7], [7, 7]],       
           [[9, 9], [9, 9], [9, 9]],       
           [[10, 10], [10, 10], [10, 10]] ])

它的形状是(7,3,2)。起初,这对我来说似乎微不足道,但经过多年的np.dstack()、np.astype()、np.repeat()和transposes与().T的实验,我无法正确地确定维度顺序。

这里最关键的是,垂直列是第一个维度。我敢打赌答案确实是微不足道的,我只是找不到神奇的numpy函数来完成它。

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-04 07:46:59

我们只需在没有额外内存开销的情况下,就可以在没有额外内存开销的情况下获得输入z的视图,因此在性能上几乎是免费的-

代码语言:javascript
运行
复制
np.broadcast_to(z[:,None,None],(len(z),ndimx,ndimy))

样本运行-

代码语言:javascript
运行
复制
In [23]: z
Out[23]: array([ 0,  2,  3,  5,  7,  9, 10])

In [24]: ndimx=3; ndimy=2

In [25]: np.broadcast_to(z[:,None,None],(len(z),ndimx,ndimy))
Out[25]: 
array([[[ 0,  0],
        [ 0,  0],
        [ 0,  0]],

       [[ 2,  2],
        [ 2,  2],
        [ 2,  2]],

       [[ 3,  3],
        [ 3,  3],
        [ 3,  3]],

       [[ 5,  5],
        [ 5,  5],
        [ 5,  5]],

       [[ 7,  7],
        [ 7,  7],
        [ 7,  7]],

       [[ 9,  9],
        [ 9,  9],
        [ 9,  9]],

       [[10, 10],
        [10, 10],
        [10, 10]]])
票数 1
EN

Stack Overflow用户

发布于 2018-12-04 07:54:10

代码语言:javascript
运行
复制
In [360]: z = np.array([0, 2, 3, 5, 7, 9, 10])
In [361]: z1 = np.stack([z,z], axis=1)
In [362]: z2 = np.stack([z1,z1,z1],axis=1)
In [363]: z2
Out[363]: 
array([[[ 0,  0],
        [ 0,  0],
        [ 0,  0]],

       [[ 2,  2],
        [ 2,  2],
        [ 2,  2]],

       [[ 3,  3],
        [ 3,  3],
        [ 3,  3]],

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

https://stackoverflow.com/questions/53607928

复制
相关文章

相似问题

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