如何通过python更改与一维数组匹配的矩阵中的值

如何通过python更改与一维数组匹配的矩阵中的值,python,arrays,matrix,where-clause,Python,Arrays,Matrix,Where Clause,我刚从MATLAB转到python,花了1天时间,但没能解决这个问题。有人想过吗? D1是由30个值组成的一维数组=['1','2',…'30'] D2是由30个值组成的一维数组=['1','1',…'1',],稍后我可能会在D2中引入不同的值,如1,1,2….3 我想用D2替换矩阵中匹配的D1值(512X512X50的Z1)。我编写了以下函数,但它不起作用 for i,n in enumerate(D1): for j in range(50): z1[:,:,j] =

我刚从MATLAB转到python,花了1天时间,但没能解决这个问题。有人想过吗? D1是由30个值组成的一维数组=['1','2',…'30'] D2是由30个值组成的一维数组=['1','1',…'1',],稍后我可能会在D2中引入不同的值,如1,1,2….3

我想用D2替换矩阵中匹配的D1值(512X512X50的Z1)。我编写了以下函数,但它不起作用

for i,n in enumerate(D1):
   for j in range(50):
        z1[:,:,j] = np.where(z1[:,:,j] == D1[i], D2[i], z[:,:,j])'''
执行时,按如下方式获取警告和输出

$z1.max() output is 33 which should be 1.

警告:未来警告:元素级比较失败;返回标量,但将来将执行元素级比较

您的描述将讨论2个1d数组和一个3d数组。我使用更小的阵列进行合成。小心Numpy生成的数据类型-固定长度字符串。我在这个例子中使用了两个字符

我正在根据从
np.where()

输出(为了节省空间,仅显示3D阵列的第一行)

{'D1':['01','02','03','04','05','06','07','08','09'],
‘D2’:[0n’、‘1n’、‘2n’、‘3n’、‘4n’、‘5n’、‘6n’、‘7n’、‘8n’],
'Z1':数组([['00','00','00','01','01','02','02','02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02'],
['00', '00', '00', '01', '01', '01', '02', '02', '02']],

dtype='能否用一个简单的例子来说明输入和输出,也许是一个3或5个值的数组?我不确定从粘贴的代码中是否清楚您想要实现什么。
import numpy as np
D1 = ["0" + str(n+1) for n in range(9)]
D2 = [str(n) + "n" for n in range(9)]
Z1 = np.array([[["0" + str(k//3) for k in range(9)] for j in range(8)] for i in range(8)])

Z2 = Z1.copy()

for n in range(len(D1)):
    for x,y,z in list(zip(*np.where(Z1==D1[n]))):
        Z2[x][y][z] = D2[n]
{"D1":D1, "D2":D2, "Z1":Z1[0], "Z2":Z2[0]}


{'D1': ['01', '02', '03', '04', '05', '06', '07', '08', '09'],
 'D2': ['0n', '1n', '2n', '3n', '4n', '5n', '6n', '7n', '8n'],
 'Z1': array([['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02'],
        ['00', '00', '00', '01', '01', '01', '02', '02', '02']],
       dtype='<U2'),
 'Z2': array([['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n'],
        ['00', '00', '00', '0n', '0n', '0n', '1n', '1n', '1n']],
       dtype='<U2')}