Python问题引发的想法:代码的终点是数学还是哲学

今天发现一个特别简单又有内涵的问题,我说它简单,是因为从程序修复的角度,一般人都能修改,说它有内涵,是因为它确实可以引发一些思考。

问题是这样的:

Traceback (most recent call last):
  File "C:/Users/LENOVO/Desktop/youyong.a", line 1, in <module>
    import numpy as np
  File "D:\python37\numpy.py", line 6, in <module>
    add = [X0[0] + X0[1]]
IndexError: list index out of range

在灰色预测中出现这个问题该怎么解决?

这个错误翻译过来就是:indexerror:列表索引超出范围,有一点编程经验的人都知道,这是因为取的列表下标没有而导致报错。

就好像你去银行取钱,本来只有50块,但是你非要取100块,那肯定取不出,提示你余额不足。

基于严谨的原则,我去找了源码,打算运行一下,看为什么出错,下面是部分代码:

import numpy as np

import math as mt


X0 = ['数据']

# 累加数列

X1 = [X0[0]]

add = X0[0] + X0[1]

X1.append(add)

i = 2

while i < len(X0):

    add = add + X0[i]

    X1.append(add)

    i += 1

乍一看,会觉得一头雾水,觉得自己可以解决,又不可以解决,就是这样矛盾的感觉。

我开始也是这样的感觉,我还特意仔细读了原文,我发现好像要去学高等数学?

越想越远的感觉,我直接运行了代码,果然是上面这个错误:

add = [X0[0] + X0[1]]
IndexError: list index out of range

难道我真的要去雪高等数学来解决这个问题吗?

答案当然是否定的。

我不觉得我可以在短时间内能学好这部分的高等数学,然后继续完成这个题目,应该还有我忽略的地方。

瞬间也有了那种学了那么多年的编程,感觉还是有点心慌,到底是不是选错专业了,应该去学数学,是不是学编程没什么用了?

在我想不出解决方法的时候,我打算看看gpt对于这个问题有什么见解。

我随意的把问题发给通义千问,本来没指望它能帮我解决这个简单到不能算是问题的问题,在它输出不到两行的瞬间,我就抓住了重点,数据,再联系上下文,原来的预测模型的这个意思:把你真实得历史数据放到数据这个列表,然后通过这个预测模型,生成一些未来的预测数据,以辅助我们进行决策。

完整源代码是这样的:

import numpy as np
import math as mt

X0 = ['数据']
# 累加数列
X1 = [X0[0]]
add = X0[0] + X0[1]
X1.append(add)
i = 2
while i < len(X0):
    add = add + X0[i]
    X1.append(add)
    i += 1
    
# 紧邻均值序列
Z = []
j = 1
while j < len(X1):
    num = (X1[j] + X1[j - 1]) / 2
    Z.append(num)
    j = j + 1

# 最小二乘法计算
Y = []
x_i = 0
while x_i < len(X0) - 1:
    x_i += 1
    Y.append(X0[x_i])
Y = np.mat(Y)
Y = Y.reshape(-1,1)
B = []
b = 0
while b < len(Z):
    B.append(-Z[b])
    b += 1
B = np.mat(B)
B = B.reshape(-1,1)
c = np.ones((len(B),1))
B = np.hstack((B,c))
print("B",B)

# 求出参数
alpha = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Y)
a = alpha[0,0]
b = alpha[1,0]
print('alpha',alpha)
print("a=",a)
print("b=",b)

# 生成预测模型
GM = []
GM.append(X0[0])
did = b/a
k = 1
while k < len(X0):
    GM.append((X0[0] - did) * mt.exp(-a * k) + did)
    k += 1

# 做差得到预测序列
G = []
G.append(X0[0])
g = 1
while g < len(X0):
    G.append(round(GM[g] - GM[g - 1]))
    g += 1
print("预测数列为:",G)

问题来源:

https://ask.csdn.net/questions/8102092

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 12:50:10       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 12:50:10       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 12:50:10       87 阅读
  4. Python语言-面向对象

    2024-05-13 12:50:10       96 阅读

热门阅读

  1. Flutter 中的 ListView 小部件:全面指南

    2024-05-13 12:50:10       38 阅读
  2. 学习笔记:IEEE 1003.13-2003【POSIX PSE54接口列表】

    2024-05-13 12:50:10       33 阅读
  3. GNU/Linux - 系统启动流程及rcS脚本介绍

    2024-05-13 12:50:10       29 阅读
  4. Flutter 中的 Image 小部件:全面指南

    2024-05-13 12:50:10       37 阅读
  5. fone脚本常用js方法

    2024-05-13 12:50:10       38 阅读
  6. mysql 日志详解

    2024-05-13 12:50:10       38 阅读
  7. mybatis快速入门

    2024-05-13 12:50:10       27 阅读