如何用Python生成末行固定为0的全部唯一4x1矩阵组合?
问题修复方案
原有代码错误点
Matrix4x1函数内未定义变量j就直接调用,触发NameError- 矩阵初始化错误:
np.zeros([4,0])生成的是4行0列的空矩阵,无法存储数据,你需要的是4行1列的矩阵 - 遍历逻辑错误:双重循环无法生成你需要的「下标严格递增的三元组」,会出现重复/遗漏的组合,且你要排除原始数组最后一行的0,只从前6行选前三行的元素
- 矩阵赋值逻辑错误:每个输入的
arra/arrb/arrc都是单元素数组,不需要循环遍历下标赋值
修复后可运行代码
import numpy as np # 生成4x1矩阵的工具函数 def Matrix4x1(arra, arrb, arrc): # 初始化4行1列的矩阵,默认值为0,最后一行不需要改正好符合要求 matrix = np.zeros((4, 1), dtype=float) # 直接给前三行赋值即可 matrix[0] = arra matrix[1] = arrb matrix[2] = arrc return matrix # 生成所有符合要求的矩阵列表 def EnergyArrays(arr_e): listn = [] # 前三行只从原始数组的前6个元素选取(最后一个是固定的0不用参与组合) selectable_len = len(arr_e) - 1 # 遍历所有i<j<k的三元组,对应你要的按顺序选的规则 for i in range(selectable_len - 2): for j in range(i + 1, selectable_len - 1): for k in range(j + 1, selectable_len): current_matrix = Matrix4x1(arr_e[i], arr_e[j], arr_e[k]) listn.append(current_matrix) return listn # 测试示例 if __name__ == "__main__": # 你的原始数组 arr_e = [ [-28.71703997], [-20.3186618], [-47.5926421], [-24.42789423], [-69.78148825], [-42.91613279], [0.0] ] result = EnergyArrays(arr_e) # 打印前两个结果验证格式 for mat in result[:2]: print(mat) print()
运行输出验证
运行后前两个输出和你预期的格式完全一致:
[[-28.71703997] [-20.3186618 ] [-47.5926421 ] [ 0. ]] [[-28.71703997] [-20.3186618 ] [-24.42789423] [ 0. ]]
内容的提问来源于stack exchange,提问作者Jill Addington
相关产品推荐
相关产品推荐

