Numpy定义仅通过行数调用的01方阵生成函数报错求解
错误点梳理
- 变量定义顺序倒置:你在创建数组
M时用到的参数N、O还没有被赋值,代码执行时会先触发变量未定义的报错,和你后面修改的global逻辑无关,这是前置错误。 - 函数参数与全局变量重名冲突:第二次尝试中你声明了
global N,但N同时是函数sqm的入参,Python不允许同一个变量名在函数内同时作为局部参数和全局变量使用,因此触发SyntaxError。 - 逻辑规则矛盾:你写的while循环判断条件为
N == O,循环内的分支判断又为N != O,两个条件互斥,代码永远无法执行到返回数组的逻辑。 np.full使用不符合需求:np.full的作用是生成所有元素填充为固定值的数组,你传入填充值(0, 1)无法生成随机0、1的矩阵,也无法实现首元素固定为0的要求。
正确实现代码
你需要的功能可以通过np.random.randint生成随机0、1矩阵后修改首元素实现,代码如下:
%matplotlib inline import numpy as np import matplotlib.pyplot as plt def generate_square_matrix(n): # 生成n行n列的随机0、1矩阵 mat = np.random.randint(0, 2, size=(n, n), dtype=int) # 首元素固定为0 mat[0, 0] = 0 return mat print(generate_square_matrix(5))
如果必须使用np.full实现(仅适合固定填充规则的场景,比如交替填充0、1),可以参考如下写法:
def generate_square_matrix(n): # 以行维度交替填充0、1为例 fill_pattern = [0, 1] if n % 2 ==0 else [0,1]*(n//2) + [0] mat = np.full((n, n), fill_pattern, dtype=int) mat[0, 0] = 0 return mat
内容的提问来源于stack exchange,提问作者MadMarx17
相关产品推荐
相关产品推荐

