numpy.digitize(data,bins)函数用法

digitize(data,bins)函数是numpy的一个内置函数。让人感到很震惊的是,网上居然很少有关于这个函数用法的中文介绍。

先上代码:

import random as rd
data=[rd.randint(a=100,b=1000) for _ in range(20)]
bins=[200,300,400,500,600,700,800,900,1000]
print('data:',data)
print('bins:',bins)
print('np.digitize(data,bins):',np.digitize(data,bins))
运行结果如下:


Tips:digitize(data,bins)函数对data列表似乎没有什么要求,但是对bins列表是由要求的:要求bins雷暴汇总的数据要么是升序的要么是降序的,绝壁不能是随意的一堆数。

大家可以很清楚的看到,digitize(data,bins)函数执行的过程大概如下:相当于两层for循环。首先最外面的一层:顺序的遍历data列表,取出当前的一个数a,然后顺序的遍历bins列表,返回bins列表中某个数的索引,如何找呢? 规则如下:如果:bins列表是升序的,那么如果满足 bins[i-1]<=a<bins[i],那么就保存i,然后回到外层循环继续上面的操作,如果bins列表是降序的,那么如果满足 bins[i]<=a<bins[i-1],那么就保存i,当data列表遍历完之后,就返回由i组成的来源于bins的索引的一个索引列表。

不知道我说清楚了木有,有问题的我们可以继续讨论下。记得点赞哦。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
import pandas as pd import openpyxl # import matplotlib.pyplot as plt import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn.model_selection import train_test_split # 打开Excel文件 wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx') # 选择需要读取的工作表 ws = wb['Sheet1'] # 读取第一列第二行之后的数据 data = [] for row in ws.iter_rows(min_row=2, min_col=1, values_only=True): data.append(row[0]) # 打印读取的数据 # print(data) # # 将浮点型数据按照等宽离散化的方法转化为离散型数据 # bin_edges = np.linspace(min(data), max(data), num=10) # discretized_data = np.digitize(data, bin_edges) # # 打印转化后的数据 # print(discretized_data) # 假设数据共有N个点,采样周期为0.25秒 N = len(data) t = np.arange(N) * 0.25 # labels2 = pd.cut(t, bins=10, labels=False) #组合时间序列和采样值 data1 = np.column_stack((t,data)) print(data1[:10]) # 打印前10行数据 # train_test_split函数用于将数据集划分为训练集和测试集,其中test_size参数指定了测试集所占的比例, # random_state参数指定了随机种子,以保证每次划分的结果相同。 X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42) clf = AdaBoostClassifier(n_estimators=100, random_state=0) clf.fit(X_train, y_train) clf.predict([[0,0,0,0]]) clf.score(X_train, y_train)报错ValueError: X has 2 features, but AdaBoostClassifier is expecting 1 features as input.
06-01
根据代码中的错误提示,可以看出AdaBoostClassifier期望的特征数量为1,但是在训练和测试数据中,特征数量为2,这是导致报错的原因之一。另外,代码的最后一行clf.predict([[0,0,0,0]])也需要修改,因为数据集中的特征数量为2,而预测数据的特征数量为4,也是不匹配的。可以将预测数据的特征数量修改为2,如下所示: ``` import pandas as pd import openpyxl import numpy as np from sklearn.ensemble import AdaBoostClassifier from sklearn.model_selection import train_test_split # 打开Excel文件 wb = openpyxl.load_workbook('./处理过的训练集/987027.xlsx') # 选择需要读取的工作表 ws = wb['Sheet1'] # 读取第一列第二行之后的数据 data = [] for row in ws.iter_rows(min_row=2, min_col=1, values_only=True): data.append(row[0]) # 假设数据共有N个点,采样周期为0.25秒 N = len(data) t = np.arange(N) * 0.25 # 组合时间序列和采样值 data1 = np.column_stack((t,data)) print(data1[:10]) # train_test_split函数用于将数据集划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data1[:, :-1], data1[:, -1], test_size=0.2, random_state=42) # 修改AdaBoostClassifier期望的特征数量为1 clf = AdaBoostClassifier(n_estimators=100, random_state=0) clf.fit(X_train, y_train) clf.predict([[0,0]]) # 修改预测数据的特征数量为2 clf.score(X_train, y_train) ``` 注意,上述修改只是解决了特征数量不匹配的问题,如果还有其他问题需要进一步调试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值