首页 > 解决方案 > 如何通过python更改与一维数组匹配的矩阵中的值

问题描述

我刚从 MATLAB 转到 python 并花了 1 天但无法解决这个问题。有人对此有任何想法吗?D1 是 30 个值的一维数组= ['1','2',...'30'] D2 是 30 个值的一维数组=['1','1',...'1'],稍后我可能会在 D2 中引入不同的值作为 1,1,2....3

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

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.

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

标签: pythonarraysmatrixwhere-clause

解决方案


您的描述谈到了 2 个 1d 数组和一个 3d 数组。我已经使用较小的数组进行了合成。当心 Numpy 生成的数据类型 - 固定长度的字符串。我已经在各处使用了 2 个字符来让这个示例正常工作

我正在根据形成元组数组来更新 3d 数组np.where()

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]}


输出(为了空间,只是 3D 数组的第一行)

{'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')}

推荐阅读