我有一个9x9x9的三维数组,它是27个3x3x3的立方体。在确定了两个3x3x3的“立方体”和“id's”从0到26之后,我想更改值两个“立方体”中的一个。当我这么做的时候,我只会改变值第一个立方体的(只有第一行)
为什么python不进行第二个更改
mat = np.arange(729).reshape(9,9,9)
idO = int(input('Enter first id \n'))
idD = int(input('Enter second id \n'))
def limites(id):
x=id%3
y=(id%9)//3
z=id//9
limites = np.array([z,y,x])
return limites
def mover(limitesA, limitesB):
tempA = mat[limitesA[0]*3:(limitesA[0]*3)+3, limitesA[1]*3:(limitesA[1]*3)+3, limitesA[2]*3:(limitesA[2]*3)+3]
print(tempA)
tempB = mat[limitesB[0]*3:(limitesB[0]*3)+3, limitesB[1]*3:(limitesB[1]*3)+3, limitesB[2]*3:(limitesB[2]*3)+3]
print(tempB)
# only the first line does
mat[limitesB[0]*3:(limitesB[0]*3)+3, limitesB[1]*3:(limitesB[1]*3)+3, limitesB[2]*3:(limitesB[2]*3)+3] = tempA
mat[limitesA[0]*3:(limitesA[0]*3)+3, limitesA[1]*3:(limitesA[1]*3)+3, limitesA[2]*3:(limitesA[2]*3)+3] = tempB
limA=limites(idO)
limB=limites(idD)
mover(limA, limB)
我希望输出改变两个立方体
mat[limitesB[0]*3:(limitesB[0]*3)+3, limitesB[1]*3:(limitesB[1]*3)+3, limitesB[2]*3:(limitesB[2]*3)+3] = tempA
mat[limitesA[0]*3:(limitesA[0]*3)+3, limitesA[1]*3:(limitesA[1]*3)+3, limitesA[2]*3:(limitesA[2]*3)+3] = tempB
但实际输出只改变第一个立方体
mat[limitesB[0]*3:(limitesB[0]*3)+3, limitesB[1]*3:(limitesB[1]*3)+3, limitesB[2]*3:(limitesB[2]*3)+3] = tempA
原因如下:
它创建一个视图,这意味着如果
mat
改变,那么tempB
也会改变稍后,将
mat
的tempB
部分指定给它:因此,以下两项是等效的:
要解决此问题,请复制:
相关问题 更多 >
编程相关推荐