如何将矩阵中的1替换为x中对应索引的数值?
问题:用列表对应索引值替换矩阵中的1
需求
需用x中对应索引的数值替换矩阵z_prime中的1。
现有代码
x = [0.5697071, 0.47144773, 0.45310486] z_prime= [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1]] flatten_matrix = [val for val in z_prime ] for val in flatten_matrix: for j in val: if(j!=0): z= x else: z = 0 print(z)
当前输出
0 0 0 0 0 [0.5697071, 0.47144773, 0.45310486] 0 [0.5697071, 0.47144773, 0.45310486] 0 0 [0.5697071, 0.47144773, 0.45310486] [0.5697071, 0.47144773, 0.45310486]
期望输出
[[0, 0, 0], [0, 0, 0.45310486], [0, 0.47144773, 0], [0, 0.47144773, 0.45310486]]
修正后的代码与解释
问题分析
原代码的核心问题:
- 仅遍历元素但未构建目标矩阵结构,直接打印单个值
- 遇到
1时直接赋值整个x列表,而非对应索引的元素 - 未利用元素索引关联
x中的对应值
基础版修正代码
x = [0.5697071, 0.47144773, 0.45310486] z_prime = [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1]] # 初始化结果矩阵 result = [] for row in z_prime: new_row = [] # 用enumerate同时获取元素索引和值 for idx, val in enumerate(row): if val == 1: # 替换为x中对应索引的数值 new_row.append(x[idx]) else: new_row.append(val) result.append(new_row) print(result)
简化版(列表推导式)
如果追求简洁,可以用嵌套列表推导式实现:
x = [0.5697071, 0.47144773, 0.45310486] z_prime = [[0, 0, 0], [0, 0, 1], [0, 1, 0], [0, 1, 1]] result = [[x[idx] if val == 1 else val for idx, val in enumerate(row)] for row in z_prime] print(result)
效果说明
两段代码都会输出符合期望的矩阵,核心逻辑是通过enumerate获取元素的索引,将矩阵中值为1的元素替换为x列表对应索引的数值,同时保留原矩阵的结构。
内容的提问来源于stack exchange,提问作者Reks
相关产品推荐
相关产品推荐

