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