Python 将40x5矩阵插入1000x1000x3的三维阵列

Python 将40x5矩阵插入1000x1000x3的三维阵列,python,arrays,numpy,numpy-ndarray,numpy-slicing,Python,Arrays,Numpy,Numpy Ndarray,Numpy Slicing,我有一个python代码,它将创建一个1000x1000x3 3D数组,我试图在某个特定位置将40x5矩阵替换为1000x1000x3 3D数组。对于一个我可以替换的元素,但是如何替换40x5阵列 让我们举个例子 myarray = 1000,1000,3 matrix = 40x5 (this array code will generate) insert position = 100th row of 10 th line 对于2D图像,它可以这样工作 myarray = np.aran

我有一个python代码,它将创建一个1000x1000x3 3D数组,我试图在某个特定位置将40x5矩阵替换为1000x1000x3 3D数组。对于一个我可以替换的元素,但是如何替换40x5阵列

让我们举个例子

myarray = 1000,1000,3
matrix = 40x5 (this array code will generate)
insert position = 100th row of 10 th line

对于2D图像,它可以这样工作

myarray = np.arange(36).reshape(6,6)
matrix = np.zeros((2,2))
x_dim, y_dim = matrix.shape()
start_x = 1
start_y = 2

myarray[start_y:start_y + y_dim, start_x:start_x + x_dim] = matrix 

out: array([[ 0,  1,  2,  3,  4,  5],
            [ 6,  7,  8,  9, 10, 11],
            [12,  0,  0, 15, 16, 17],
            [18,  0,  0, 21, 22, 23],
            [24, 25, 26, 27, 28, 29],
            [30, 31, 32, 33, 34, 35]])
如果您有三维阵列,您可以通过以下方式访问各个“层”:

如果要在每个层中打印矩阵,可以在层轴上循环:

for layer_id in myarray:
     myarray[layer_id][start_y:start_y + y_dim, start_x:start_x + x_dim] = matrix

使用numpy高级索引:

r, c = matrix.shape
#insert position row and column
idx = [insert_row,insert_column]
myarray[idx[0]:idx[0]+r, idx[1]:idx[1]+c, :] = matrix[:,:,None]
例如:

myarray = np.zeros((5,5,3))
matrix = np.ones((2,3))
idx = [1,2]
输出:

[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

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

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

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]

我在示例中提到了“myarray=10001000,3”,请阅读完整的问题。您不能使用该数组更新sinlge位置。结果必须在所有轴上均匀。否则,你会得到一个锯齿状的array@yatu你的意思是只有一个维度会被替换,对吗?你希望得到什么样的输出?更新单个位置意味着什么?你是说轴心吗?输出形状是什么?例如,我有一个100x100的3D数组,还有一个10x10的小1D数组,我需要将100x100(例如:位置将类似于第10行的第50列)替换为所有3维的10x10数组值,如果我混淆了,很抱歉。我们可以为3D数组执行此操作吗,因为我的数组是3D的。谢谢jorn,让我试试,谢谢你的及时帮助。@AdarshBabu不客气。正确的方法是接受/投票决定答案。请查看如何接受答案,并欢迎来到SO。Ehsan我是SO的新手,我对您的答案投了赞成票,但我想我现在没有这样做的权限,
[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

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

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

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]