python - 我该如何解决这个错误?类型错误:_append_dispatcher() 缺少 1 个必需的位置参数:“值”
问题描述
我正在运行某个代码,执行如下所示的代码后,此错误不断出现:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
X_train = []
y_train = []
for i in range(60, 2035):
X_train=np.append(training_set_scaled[i-60:i, 0])
y_train=np.append(training_set_scaled[i, 0])
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
错误:
TypeError: _append_dispatcher() missing 1 required positional argument: 'values'
解决方案
您似乎混淆了列表和数组操作。您的特定错误发生在np.append
. 你(重新)阅读过它的文档吗?当遇到这样的错误时,这应该是你做的第一件事(在跑到 SO 寻求帮助之前!)
“不断出现”是什么意思?您是否继续尝试相同的事情以希望下次不会发生错误?像这样的错误不是随机的:)
首先,您创建两个列表:
X_train = []
y_train = []
通常像这样的列表在循环中使用
for i in range(...):
X_train.append(i)
重复向列表中添加值。这可以就地工作。
但在本次迭代中,您切换到数组:
for i in range(60, 2035):
X_train=np.append(training_set_scaled[i-60:i, 0])
y_train=np.append(training_set_scaled[i, 0])
np.append
不是列表追加克隆。好的,你知道它返回了一个新值。但是第二个值在哪里?
training_set_scaled[i-60:i, 0]
索引二维数组、行切片和第一列。那是你的意图吗?还是0
应该在外部[]
,并且是您添加到该切片的值?没有有关阵列的信息和您的意图,我们不能说。
您还将结果分配np.append
给X_train
。该变量现在是一个数组,最初是一个[]
列表。X_train
如果您只是要丢弃该值,为什么还要初始化该列表。或者,您是否打算这样做:
X_train.append(training_set_scaled[i-60:i, 0])
将数组切片添加到X_train
列表中?
接下来,您将数组包装在np.array
. 为什么? np.append
,如果有效,则返回一个数组。无需再次“制作”它一个数组!
X_train, y_train = np.array(X_train), np.array(y_train)
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
最后一步大概会添加一个尾随维度到X_train
.
下一次迭代会发生什么?您再次(尝试)将np.append
结果分配给X_train
. 这会丢弃X_train
您在上一次迭代结束时如此费力地创建的内容。
看起来您已经采用了列表追加模型,并笨拙地将其转换为数组追加。它不仅不起作用,而且效率低下。列表追加操作就地添加对列表的引用。 np.append
(和其他np.concatenate/stack
功能),每次都创建一个新数组,这是一个更昂贵的步骤。通常我们建议在循环中坚持使用列表追加,并在最后一次调用创建数组。
从根本上说,在构建这样的复杂迭代时,请密切注意变量在循环中发生的情况。不要做假设。在交互式会话中测试代码片段。Aprint
检查变量,密切注意类型和形状/尺寸。如果您愿意,还可以使用调试器来测试循环中的值。再次 - 阅读文档!
推荐阅读
- c++ - 如何从 vcpkg 导入 cmake 中的包?
- android - 数据绑定如何与 Android 中的 DataBindingUtil.bind 与 ActivityBinding.inflate 一起使用
- rust - 如何分配给切片范围?
- node.js - 使用 babylonjs 在 nodejs 上验证 gltf/glb 文件
- codeigniter - 获取每位用户的佣金总额/总和并显示
- javascript - Laravel 8 Javascript函数不适用于表单标签
- sql-server - 将 ADO.NET 传递给存储过程时如何指定日期格式?
- java - 垂直和对角循环遍历矩阵
- php - codeigniter form_hidden 不发布数据
- java - 如何使用 nio 将阅读器写入文件?