如何基于跨数组匹配逻辑生成含lambda函数的4x4 numpy数组
问题排查与实现方案
原有代码问题
- 未初始化目标数组
adj_array,直接返回会触发未定义变量报错 - 遍历
ref_array时仅获取了单元格值,未记录对应的行列索引,匹配成功后无法定位写入位置 - 匹配逻辑倒置:你需要遍历输入
array的每行取前两个值作为匹配键,定位到ref_array的对应坐标后写入lambda,而非遍历ref_array匹配固定切片 - 硬编码的
ref_array存在明确规律ref_array[row][col] = (row + 5, col),可以省略硬编码步骤直接计算坐标,大幅提高执行效率
正确实现代码
import numpy as np def the_matrix(array): # 初始化4x4目标数组,默认填充inf,类型为object支持存储函数对象 adj_array = np.full((4,4), np.inf, dtype=object) # 遍历输入数组的每一行 for row in array: key1, key2, func = row # 计算参考数组对应的行列索引:key1=5对应第0行,key1=6对应第1行,以此类推;key2直接对应列索引 ref_row = key1 - 5 ref_col = key2 # 边界校验避免索引越界 if 0 <= ref_row < 4 and 0 <= ref_col < 4: adj_array[ref_row, ref_col] = func return adj_array # 测试用输入 array = np.array([[5, 1, lambda N: 120], [5, 2, lambda N: 30], [6, 3, lambda N: 30], [7, 3, lambda N: N/30]])
输出验证
调用the_matrix(array)后得到的结果与你给出的示例完全一致:
array([[inf, <function <lambda> at 0x00000291139AF790>, <function <lambda> at 0x00000291139AF820>, inf], [inf, inf, inf, <function <lambda> at 0x00000291139AF8B0>], [inf, inf, inf, <function <lambda> at 0x00000291139AF940>], [inf, inf, inf, inf]], dtype=object)
内容的提问来源于stack exchange,提问作者Renaissance Man
相关产品推荐
相关产品推荐

