numpy.c_报错ValueError: special directives must be the first entry原因解析
解析np.c_报错"special directives must be the first entry"的原因
直接错误原因
你遇到的这个报错,核心问题是传入np.c_的参数类型不对。你传入的new_timeInMinutes、new_season、new_ext_temp都是单个的标量值(比如整数、浮点数这类单个数值),但np.c_的设计初衷是用来拼接数组或者可迭代序列的,不是直接处理单个标量。
当你把单个标量传给np.c_时,numpy会误把这个标量当成它支持的"特殊指令"(比如控制拼接方向的指令),但这个标量并不是合法的指令,而且按照规则,特殊指令必须放在第一个参数的位置,所以就触发了这个错误。
报错信息的具体含义
报错里的special directives指的是np.c_支持的特殊控制参数,比如:
'r':强制按行拼接(等价于np.r_)'c':强制按列拼接(np.c_的默认行为)- 数字(比如
0、1):指定拼接的轴方向
这些指令必须作为np.c_的第一个参数传入才合法,但你这里第一个参数是普通的时间分钟数(标量),numpy识别不出这是合法指令,所以就抛出了"特殊指令必须是第一个条目"的错误。
解决方法
你想要的是把三个单个值拼成一个适合sklearn模型predict方法的二维数组(因为模型要求输入是二维的,形状为(样本数, 特征数)),这里有几种简单的修正方式:
方法1:直接构造二维数组(最直观)
new_data_h = np.array([[new_timeInMinutes, new_season, new_ext_temp]])
方法2:把标量转为一维数组后再用np.c_
new_data_h = np.c_[np.array([new_timeInMinutes]), np.array([new_season]), np.array([new_ext_temp])]
方法3:用np.column_stack自动处理标量转数组
new_data_h = np.column_stack((new_timeInMinutes, new_season, new_ext_temp))
这三种方法都能得到形状为(1, 3)的二维数组,符合clf_h.predict()的输入要求。
内容的提问来源于stack exchange,提问作者Cesc
相关产品推荐
相关产品推荐

