【问题标题】:How to fix TypeError: can't multiply sequence by non-int of type 'numpy.float64'如何修复 TypeError:不能将序列乘以“numpy.float64”类型的非整数
【发布时间】:2020-05-01 00:42:09
【问题描述】:

我不知道如何解决这个错误。我希望你们中的一些人可以帮助我。我真的很感激。 Python中的这段代码:

import numpy as np
from calendar import monthrange
import matplotlib.pyplot as plt

r2T2m = np.loadtxt("E:\koppen-master\R_THANHHOA_1998_2019.txt",comments="#")

nyr = len(r2T2m[:,1])/31    
nyr = int(nyr)

print("number of the years", nyr)

r3T2m = np.reshape(r2T2m[:,1:13],(nyr,31,12))

r2T2m_mn = np.zeros(shape=(nyr,12))

iyr = 0    
while iyr < nyr:

    imn = 0         
    while imn < 12:

        idy = 0     
        ndy = 0 
        ndy_of_mn = monthrange(1998 + iyr, imn+1)

        while idy <31:

            if r3T2m[iyr][idy][imn] >= -10.:  

                ndy = ndy + 1
                r2T2m_mn[iyr][imn] = r2T2m_mn[iyr][imn]+r3T2m[iyr][idy][imn]

            idy = idy+1

        r2T2m_mn[iyr][imn] = round((r2T2m_mn[iyr][imn]*ndy_of_mn)/float(ndy),2)
        imn = imn + 1

    print("Year:", iyr+1998, "  ", r2T2m_mn[iyr])
    iyr = iyr + 1

我使用的数据:

我收到的错误消息:

TypeError: 不能将序列乘以“numpy.float64”类型的非整数

如何解决问题?

【问题讨论】:

  • 请重新格式化您的代码(see)
  • 您在哪一行得到错误?

标签: python


【解决方案1】:

这行是问题所在:

r2T2m_mn[iyr][imn] = round((r2T2m_mn[iyr][imn]*ndy_of_mn)/float(ndy),2)

这里ndy_of_mn 是一个元组 see,但r2T2m_mn[iyr][imn] 是一个浮点数。你不能把这两个东西相乘。

更多解释

通过查看这一行

ndy_of_mn = monthrange(1998 + iyr, imn+1)

我了解到您想计算一个月的天数(对吗?)。但是,monthrange 返回该月第一天的工作日和该月的天数作为元组。你只想要这个元组的第二部分。因此,您为什么不这样做:

_, ndy_of_mn = monthrange(1998 + iyr, imn+1)

这样ndy_of_mn 就不再是一个元组了。

【讨论】:

  • 感谢您的评论。我怎样才能得到解决方案?
  • @ViệtNguyễnĐức 你检查我上面分享的链接了吗?
  • 是的,我明白了。 "返回指定年份和月份的每月第一天的工作日和月份的天数。"
  • @ViệtNguyễnĐức 我添加了更多解释
  • 哦,我只是做了很多复杂的方法。非常感谢你的帮助。这比我想象的要简单。现在可以工作了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
  • 2010-11-15
  • 2010-12-30
  • 2012-10-09
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多