You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 17:05:20