gpt4 book ai didi

python - 将 1 维 numpy 数组克隆到 3 维时出现维序问题

转载 作者:行者123 更新时间:2023-12-01 08:38:14 26 4
gpt4 key购买 nike

我无法找到克隆一维 numpy 数组以创建 3 维数组的方法。举例来说,我有

z = np.array([0, 2, 3, 5, 7, 9, 10])

这表示 3D 空间中的垂直柱(例如,以米为单位)。我想创建一个水平维度 (x, y),以便最终数组具有维度 (len(z), len(x), len(y)) ,其中每个 x 处的每一列,y点相同。我这样做是为了将空间维度与我拥有的其他 3D 数据相匹配。

因此,以数组 z 作为输入,并给定水平尺寸,例如 ndimx=3、ndimy=2,我想找到一个输出数组的函数

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() 和 ().T 转置,我无法获得正确的维度顺序。

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

有什么建议吗?

最佳答案

我们可以简单地使用 np.broadcast_to 获取输入 z 的 View 。没有额外的内存开销,因此几乎没有性能损失 -

np.broadcast_to(z[:,None,None],(len(z),ndimx,ndimy))

示例运行 -

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]]])

关于python - 将 1 维 numpy 数组克隆到 3 维时出现维序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53607928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com