如何用NumPy创建几何序列?代码报TypeError错误求助
解决TypeError: 'module' object is not callable及代码优化建议
错误直接原因
你导入array模块并命名为arr后,直接调用arr()创建数组,但模块本身是不可调用的对象,需要调用模块内的array类,也就是arr.array()。这是触发TypeError的核心原因。
代码逐一修正建议
1. 修复几何序列生成函数
你的nthgeo_function仅执行pow(2,nth)但未返回计算结果,导致后续生成器输出全为None,必须添加return语句:
def nthgeo_function(nth): return pow(2, nth)
2. 正确创建几何序列数组
方案一:使用array模块(匹配你的参考代码逻辑)
用arr.array()而非直接arr(),同时使用array模块兼容的类型码(比如'L'表示无符号长整型,适配2^1000的大数),无需混用numpy数组,直接遍历列表即可:
list_nth = list(range(1, 1000)) # 格式:arr.array(类型码, 元素生成器/可迭代对象) nthgeo = arr.array('L', (nthgeo_function(nth) for nth in list_nth))
方案二:使用numpy更高效(你已导入numpy)
利用numpy的向量化运算,无需单独写函数,代码更简洁:
import numpy as np nth_array = np.arange(1, 1000) # 直接生成2^n的numpy数组,指定dtype适配大数 nthgeo = np.power(2, nth_array, dtype=np.int64)
3. 修复模运算函数
原m_function是无限递归(无终止条件),且未定义m参数,改成循环遍历输出,或用numpy向量化操作:
循环版本(适配array模块或普通列表)
def m_function(arr, m): for num in arr: print(num % m) # 调用示例:假设模值m=5 m_function(nthgeo, 5)
numpy向量化版本(效率更高)
m = 5 print(nthgeo % m)
完整修正代码示例(numpy版本)
import numpy as np import array as arr # 生成n从1到999的2^n数组 nth_array = np.arange(1, 1000) nthgeo = np.power(2, nth_array, dtype=np.int64) # 执行模运算并输出 def m_function(arr, m): print(arr % m) # 调用示例 m_function(nthgeo, 7)
内容的提问来源于stack exchange,提问作者samsa
相关产品推荐
相关产品推荐

