[英]expand and copy 1D numpy array to 3D
我有一个 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
循环更简单的方法来做到这一点,但是任何通过粗略搜索显示的内容都显示了如何切割长的 1D 数组并使其变为 3D,但不会将初始维度复制到 2更多维度。
你有几个选择。 你可以像这样用np.tile
做到这一点:
y = np.tile(x[:, np.newaxis, np.newaxis], (1, 5, 5))
这将为您提供一个包含您想要的内容的新连续数组。 但是,如果您不需要写入结果数组,则可以使用np.broadcast_to
使用新形状创建数组的只读视图,从而节省实际创建更大数组的内存:
y = np.broadcast_to(x[:, np.newaxis, np.newaxis], (5, 5, 5))
请注意,由于这是一个视图,在这种情况下,更改x
的值将更改y
的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.