Python 将40x5矩阵插入1000x1000x3的三维阵列
我有一个python代码,它将创建一个1000x1000x3 3D数组,我试图在某个特定位置将40x5矩阵替换为1000x1000x3 3D数组。对于一个我可以替换的元素,但是如何替换40x5阵列 让我们举个例子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
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.]]]