数据离散化处理

有些数据本身很大,自身无法作为数组的下标保存对应的属性。

如果这时只是需要这堆数据的相对属性, 那么可以对其进行离散化处理!

离散化:当数据只与它们之间的相对大小有关,而与具体是多少无关时,可以进行离散化。

使用STL算法离散化: 思路:先排序,再删除重复元素,然后就是索引元素离散化后对应的值。 假定待离散化的序列为a[n],b[n]是序列a[n]的一个副本,则对应以上三步为:

 

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
using namespace std;

int X[10] = {1234567, 1234567, 123456789,12345678, 123456};

int a[10] = {1234567, 1234567, 123456789, 12345678, 123456};

int main()     // n = 5
{
    sort(X, X+5);
    int size = unique(X, X+5)-X;
    for(int i = 0; i < 5; i++) a[i] = lower_bound(X, X+size, a[i])-X+1;
    
    for(int i = 0; i < 5; i++) printf("%d\n", a[i]);
    system("pause");
}
View Code

 

 

 

对于第3步,若离散化后序列为0, 1, 2, ..., size - 1则用lower_bound,从1, 2, 3, ..., size则用upper_bound,其中lower_bound返回第1个不小于b[i]的值的指针,而upper_bound返回第1个大于b[i]的值的指针,当然在这个题中也可以用lower_bound然后再加1得到与upper_bound相同结果,两者都是针对以排好序列。使用STL离散化大大减少了代码量且结构相当清晰。

转载于:https://www.cnblogs.com/Buck-Meister/p/3264715.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据离散化处理是将连续型数据转换为离散型数据的过程,可以将数据划分为若干个区间(也称为“桶”),每个区间内的数据被视为相同的离散值。数据离散化处理通常用于数据挖掘、统计分析等领域。 在 Pandas 中,可以使用 cut() 和 qcut() 函数进行数据离散化处理。 cut() 函数将数据按照指定的区间划分为离散值,可以根据数据的最大值和最小值自动生成等距区间,也可以手动指定区间范围。 例如,下面的代码将一个 DataFrame 中的元素离散化为 5 个区间: ```python import pandas as pd data = pd.DataFrame({'value': [12, 34, 56, 78, 90, 23, 45, 67, 89, 100]}) bins = pd.cut(data['value'], 5) print(bins) ``` 输出结果为: ``` 0 (9.92, 28.8] 1 (28.8, 47.6] 2 (47.6, 66.4] 3 (66.4, 85.2] 4 (85.2, 104.0] 5 (9.92, 28.8] 6 (28.8, 47.6] 7 (47.6, 66.4] 8 (66.4, 85.2] 9 (85.2, 104.0] Name: value, dtype: category Categories (5, interval[float64]): [(9.92, 28.8] < (28.8, 47.6] < (47.6, 66.4] < (66.4, 85.2] < (85.2, 104.0]] ``` qcut() 函数将数据按照指定的分位数划分为离散值,可以根据数据的分布自动生成区间,也可以手动指定分位数。 例如,下面的代码将一个 DataFrame 中的元素离散化为 4 个区间: ```python data = pd.DataFrame({'value': [12, 34, 56, 78, 90, 23, 45, 67, 89, 100]}) bins = pd.qcut(data['value'], 4) print(bins) ``` 输出结果为: ``` 0 (11.999, 34.0] 1 (34.0, 56.0] 2 (56.0, 78.0] 3 (78.0, 100.0] 4 (78.0, 100.0] 5 (11.999, 34.0] 6 (34.0, 56.0] 7 (56.0, 78.0] 8 (78.0, 100.0] 9 (78.0, 100.0] Name: value, dtype: category Categories (4, interval[float64]): [(11.999, 34.0] < (34.0, 56.0] < (56.0, 78.0] < (78.0, 100.0]] ``` 在上面的例子中,cut() 函数和 qcut() 函数都返回了一个 Pandas 的 Categorical 类型的对象,可以通过 value_counts() 方法来统计每个区间内的元素个数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值