我有一个100x100的numpy数组,我想为其添加第三个维度,该维度的长度为3,具有[1,0,1]。 如果可能,我正在尝试不使用for循环。 尝试了诸如np.newaxis之类的各种方法,但是它仅扩展了长度为1的维,然后无法使用长度为3的数组进行填充。
谢谢你
答案 0 :(得分:1)
根据您的需求,您可以选择以下几种方式:
import numpy as np
arr = np.random.random((100, 100))
some_numbers = [1, 0, 1]
# A
new_arr = np.empty(arr.shape + (3,))
new_arr[..., :] = some_numbers
# array([[[1., 0., 1.],
# [1., 0., 1.],
# [1., 0., 1.],
# ...,
# A2
new_arr = np.empty(arr.shape + (len(some_numbers) + 1,))
new_arr[..., 0] = arr[..., np.newaxis]
new_arr[..., 1:] = some_numbers
# array([[[0.2853, 1., 0., 1.],
# [0.7324, 1., 0., 1.],
# [0.0706, 1., 0., 1.],
# ...,
# B
new_arr = np.empty(arr.shape + (3,))
new_arr[..., :] = arr[..., np.newaxis]
# C
new_arr = np.repeat(arr[..., np.newaxis], 3, axis=-1)
# array([[[0.2853, 0.2853, 0.2853],
# [0.7324, 0.7324, 0.7324],
# [0.0706, 0.0706, 0.0706],
# ...,
case A
中,您将用[1, 0, 1]
覆盖arr的所有元素。case A2
中,将原始数组保留在new_arr[:, :, 0]
处,并用new_arr[:, :, 1:]
填充其余平面some_numbers
。case B
和case C
中,您沿着新的第三个维度重复100x100
数组3次。答案 1 :(得分:0)
据我了解,您想生成一个3-D数组:
为了便于阅读,我更改了您的假设:
第1步:创建每个2-D数组(目标数组中的图层):
arr1 = np.ones((5,5), dtype=np.int)
arr2 = np.zeros((5,5), dtype=np.int)
arr3 = np.full((5,5), 2)
第2步:创建目标数组:
res = np.stack((arr1, arr2, arr3), axis=2)
打印 res.shape 时,您将得到:
(5, 5, 3)
(5行,5列,3层)
要分别查看每个“层”,请运行res[:, :, n]
,其中 n 为
0 , 1 或 2 。例如。对于 n == 2 (最后一层),我得到了:
array([[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]])