'numpy.ndarray' object is not callable报错原因及NumPy创建N×1数组问题
报错含义
'numpy.ndarray' object is not callable 表示代码尝试将numpy数组类型的对象作为可调用函数执行,常见触发场景有两类:
- 之前的代码中存在变量名和numpy内置函数重名的情况,比如你之前定义过
np.arange = 某数组,覆盖了原有的np.arange函数,后续调用np.arange()时就会触发该报错 - 语法书写错误,将数组索引的方括号
[]错写为小括号(),也会触发该报错
现有代码的问题
你的代码存在4处核心逻辑错误:
- 没有完成数组拼接:MATLAB中
[A B C]是对多个数组进行横向拼接,你直接把三个数组放在小括号中形成的是元组,元组既没有reshape方法,也没有完成拼接操作,无法直接参与数值运算 np.arange参数设置错误:numpy的arange生成左闭右开区间的序列,要得到和MATLAB0:N/2-1一致的序列,终止参数应设为N/2;同理要得到-N/2+1:-1的序列,终止参数应设为0,否则会缺失最后一个元素-1- 维度设置错误:你使用
reshape(1, N)得到的是1×N的行向量,和你需要的N×1列向量恰好相反 - 没有引入numpy依赖:代码运行前提是要先导入numpy库,否则
np相关调用都会报错
正确实现代码
import numpy as np N = 2 ** 15 dx = 0.1 # 拼接得到长度为N的一维序列 k_seq = np.concatenate([ np.arange(0, N/2), np.array([0]), np.arange(-N/2 + 1, 0) ]) # 乘以系数后转为N×1列向量 k = k_seq * (2 * np.pi / (N * dx)) # 两种转列向量方式二选一即可 k = k.reshape(-1, 1) # 或者 k = k[:, np.newaxis]
运行后可通过print(k.shape)验证维度,输出为(32768, 1),符合N×1的要求。
内容的提问来源于stack exchange,提问作者Dimitri_896
相关产品推荐
相关产品推荐

