python报错AttributeError: ‘numpy.ndarray‘ object has no attribute ‘rint‘

出现这种报错,首先查看numpy的版本是否是最新的,如果更新之后还是不行,则看下面。
①找到报错的那行,对它debug

ttp = np.round(np.divide(tp, dt))  # 将时间分格

②从报错提示来看,是说不能进行divide,也就是tp,dt对应不上,这时先看下大小是否一致,如果一致,则检查tp,dt中是不是那个出现了问题,才导致对应不上。
③我的dt就是一个数字128,divide的操作就是将tp分成128格,因此dt肯定没问题,那么就是tp的问题了。
④debug查看tp(是一个列表),发现它前62个参数都为{ndarray:(500,)},
后面的都是{float64:()},这也说明tp内部就没没统一好格式。
⑤解决方法:将(500,)转为float64,也就是一个数字,因为我是算的时候出现了错误,误算了500个同样的值,因此只需要取一个出来即可。

l0 = (dp0[0] - ry[i]) / math.cos(theta0) #因为dp0是有500个,则也会生成500个,只需要选出一个即可计算--dp[0]

⑥相应部分代码块如下:

for z in range(10):
    rx = list() #x,y,z三分量检波器
    ry = list()
    #rz=list()
    r = list()
    tp = list()
    tp0=list()
    tp1=list()
    # 设置层,深度--速度
    depth = np.arange(0, 1201, 1)
    dp = np.empty(shape=1201, )
    v_dp = np.squeeze(v)
    dp[:500] = v_dp[z][0]
    dp[500:] = v_dp[z][1]
    dp0 = dp[:500]  # 第一层
    dp1 = dp[500:]  # 第二层

    for i in range(63):  #取0--62个,则刚好都在第一层
        rx.append(100)  #地面排列  测线平行于x轴,均匀介质无所谓,层状介质,则要改为平行于y轴,即对y改变
        ry.append(8*i)
        a = math.pi / 12
        b = math.pi / 3
        theta = random.uniform(a, b)  # 生成a,b之间的随机数
        theta0 = math.asin(math.sin(theta) * v[z][0] / v[z][1])  # v[z][0]/v[z][1]不能大于1,否者会ValueError: math domain error,则要先对v排序
        # 距离用坐标和角度来算,固定了theta,theta0也就确定了,加上又是在地面,因此用不上检波器的坐标
        l0 = (dp0[0] - ry[i]) / math.cos(theta0) #因为dp0是有500个,则也会生成500个,只需要选出一个即可计算--dp[0]
        l1 = (ss[1] - dp0[0]) / math.cos(theta)
        t0 = l0 / v[z][0]
        t1 = l1 / v[z][1]
        t = t0 + t1
        tp.append(t)  #得到第一层检波器的时间
        #print(type(tp0))
    for j in range(63,nr):
        rx.append(100)  #地面排列  测线平行于x轴,均匀介质无所谓,层状介质,则要改为平行于y轴,即对y改变
        ry.append(8*j)
        #rz.append(i*30)
        r.append(math.sqrt((rx[j] - ss[0]) ** 2 + (ry[j] - ss[1]) ** 2))  # 计算距离,删掉了rz ,这样也对应了震源为xy轴
        tp.append(r[j-63] / v[z][1])  # 得到第二层检波器所测的时间
    ttp = np.round(np.divide(tp, dt))  # 将时间分格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值