将2D阵列扩展为具有特定长度的3D阵列

我有一个100x100的numpy数组,我想为其添加第三个维度,该维度的长度为3,具有[1,1]。 如果可能,我正在尝试不使用for循环。 尝试了诸如np.newaxis之类的各种方法,但是它仅扩展了长度为1的维,然后无法使用长度为3的数组进行填充。

谢谢你

jllykg 回答:将2D阵列扩展为具有特定长度的3D阵列

根据您的需求,您可以选择以下几种方式:

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 Bcase C中,您沿着新的第三个维度重复100x100数组3次。
,

据我了解,您想生成一个3-D数组:

  • 第一个充满一层的“层”
  • 第二个“层”用零填充,
  • 第三“层”再次充满了一层,
  • 所有尺寸为100 * 100的“图层”。

为了便于阅读,我更改了您的假设:

  • 充满“ 2 ”的第三个“层”,
  • 尺寸为5 * 5的所有“层”。

第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]])
本文链接:https://www.f2er.com/2666583.html

大家都在问