gpt4 book ai didi

python - 将 1D numpy 数组展开并复制到 3D

转载 作者:行者123 更新时间:2023-12-01 00:04:49 24 4
gpt4 key购买 nike

我有一个 1D 数组,需要将其扩展为 3D,并将原始数组复制到 axis=0 上。

目前,我有这样的设置:

import numpy as np

x = np.array((1, 2, 3, 4, 5))
y = np.zeros((len(x), 5, 5))

for i in range(5):
for j in range(5):
y[:, i, j] = x

print(y)

[[[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]

[[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]
[2. 2. 2. 2. 2.]]

[[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]
[3. 3. 3. 3. 3.]]

[[4. 4. 4. 4. 4.]
[4. 4. 4. 4. 4.]
[4. 4. 4. 4. 4.]
[4. 4. 4. 4. 4.]
[4. 4. 4. 4. 4.]]

[[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]
[5. 5. 5. 5. 5.]]]

令我震惊的是,应该有一种比嵌套 for 循环更简单的方法来做到这一点,但是通过粗略搜索显示的任何内容都显示了如何切割长一维数组并使其成为可能3D,但不将初始维度复制到另外 2 个维度。

最佳答案

您有几个选择。您可以使用np.tile来做到这一点像这样:

y = np.tile(x[:, np.newaxis, np.newaxis], (1, 5, 5))

这会给你一个新的 contiguous包含您想要的内容的数组。但是,如果您不需要写入结果数组,则可以使用 np.broadcast_to使用新形状创建数组的只读 View ,从而节省实际创建更大数组的内存:

y = np.broadcast_to(x[:, np.newaxis, np.newaxis], (5, 5, 5))

请注意,由于这是一个 View ,因此在本例中更改 x 中的值将更改 y 中的值。

关于python - 将 1D numpy 数组展开并复制到 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60044087/

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