python - 如何通过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:元素比较失败;而是返回标量,但将来将执行元素比较
解决方案
您的描述谈到了 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')}
推荐阅读
- xcode - SwiftUI 无法更改主窗格宽度 iPad 横向
- javascript - 为什么这个 javascript 函数没有添加到我的属性中?
- spring - 为什么@Value注解修改初始化的值
Autowire Constructor模式下的Spring属性 - dialogflow-es - 通过自定义数据初始化 dialogflow Messenger 聊天
- android - Android:用手指移动旋转 Imageview
- typescript - 如何将键名映射到打字稿对象的值类型
- javascript - 如何在 Amplify 上使用 gatsby 站点地图
- scala - Hudi:在嵌入式模式下访问时间服务器超时
- javascript - 使用 JS 在 HTML 中加载非图像文件
- python - 读取 CSV 中的一个数字并使用 Pandas 进行计算