开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 693|回复: 4
收起左侧

[求助] 数据排序求助 易语言有没有类似算法 python翻译易语言

[复制链接]
结帖率:95% (118/124)
发表于 2023-1-17 00:20:48 | 显示全部楼层 |阅读模式   重庆市重庆市
  
np.percentile (series, m*100)是numpy中的函数,参数是数据系列,分位数
import numpy as np
def f_pers (series):  # 定义函数,参数是数据本身
pre_list = []  # 空列表装每个数据的历史分位
for i in series:
a, b = 0, 1  # 分位的起始区间0%-100%
while True:
m = (a+b)/2  # 初始分位是50%
if np.percentile (series, m*100) >= i:  # 如果目标数据小于50%的分位对应的数据,目标数据的历史分位缩小为[0%,50%],下一次的m就是25%,目标数据可能位于0-0.25,也可能位于0.25-0.5,往复循环即可
b = m
elif np.percentile (series, m*100) < i:
a = m
if np.abs (a-b)<=0.0001:  # 循环至左右边界误差在4个百分点以后,然后终止
break
pre_list.append (round (m,3))  # 把每个数据的分位数放在列表中,取3个小数点
return pre_list  # 返回分位数列表

数据输入 my_list=[1,2,2,3,4,56,123,21,34]

434e20a9478a4f479e496e37960c232a.png



补充内容 (2023-1-17 00:35):
麻烦忽略里面的python源码  那人死循环效率太低了……
别用这算法 很垃圾……
结帖率:95% (118/124)

签到天数: 24 天

 楼主| 发表于 2023-1-17 00:21:48 | 显示全部楼层   重庆市重庆市
np.percentile(series, m*100)是numpy中的函数,参数是数据系列,分位数
import numpy as np
def f_pers(series):  # 定义函数,参数是数据本身
    pre_list = []  # 空列表装每个数据的历史分位
    for i in series:
        a, b = 0, 1  # 分位的起始区间0%-100%
        while True:
            m = (a+b)/2  # 初始分位是50%
            if np.percentile(series, m*100) >= i:  # 如果目标数据小于50%的分位对应的数据,目标数据的历史分位缩小为[0%,50%],下一次的m就是25%,目标数据可能位于0-0.25,也可能位于0.25-0.5,往复循环即可
                b = m
            elif np.percentile(series, m*100) < i:
                a = m
            if np.abs(a-b)<=0.0001:  # 循环至左右边界误差在4个百分点以后,然后终止
                break
        pre_list.append(round(m,3))  # 把每个数据的分位数放在列表中,取3个小数点
    return pre_list  # 返回分位数列表
回复 支持 反对

使用道具 举报

结帖率:95% (118/124)

签到天数: 24 天

 楼主| 发表于 2023-1-17 00:52:54 | 显示全部楼层   重庆市重庆市
QQ图片20230117005131.png

我自己解决了

数据  从小到大排序

总数据样本数量M   数据位置N   数据百分位P=  (N-1)/(M-1)


关贴。


补充内容 (2023-1-17 01:03):
算法 有误……
第二个数据2,第三个数据也是2  都是同样百分比  不能按照我那个算……
回复 支持 反对

使用道具 举报

结帖率:95% (118/124)

签到天数: 24 天

 楼主| 发表于 2023-1-17 01:41:44 | 显示全部楼层   重庆市重庆市
QQ图片20230117014016.png

  
子程序名返回值类型公开备 注
_按钮_数据百分位_被单击  
变量名类 型静态数组备 注
my_list文本型0
百分比排序数组文本型0
局_结果逻辑型 
my_list = { “1”, “2”, “2”, “3”, “4”, “56”, “123”, “21”, “34” }
局_结果 = 统计_数据百分位 (my_list, 百分比排序数组)
调试输出 (局_结果)
调试输出 (百分比排序数组)
子程序名返回值类型公开备 注
统计_数据百分位逻辑型 
参数名类 型参考可空数组备 注
参_数据文本型原始数据
局_数据百分位数组文本型接收后计算后的数据百分比数组
变量名类 型静态数组备 注
局_数量整数型 
局_数据百分位文本型 
局_数据百分位临时数值文本型 
n整数型 
' 数据  从小到大排序
' 总数据样本数量M   数据位置N   数据百分位P=  (N-1)/(M-1)
' 测试  my_list=[1,2,2,3,4,56,123,21,34]
' {“0.000”,“0.125”,“0.125”,“0.375”,“0.500”,“0.625”,“0.750”,“0.875”,“1.000”}
局_数量 = 取数组成员数 (参_数据)
调试输出 (参_数据)
如果 (局_数量 > 0)
文本数组_排序 (参_数据, )  ' 如果参数值为真,排序将从小到大;如果为假,则为从大到小。如果本参数被省略,将默认为假
调试输出 (参_数据)
计次循环首 (局_数量, n)
如果 (n > 1)  ' 第二个数据开始,需要对比上一个数据 如果相等那么百分位一样,不相等才计算
如果 (到数值 (参_数据 [n])到数值 (参_数据 [n - 1]))  ' 现在数据 大于前一个数据,计算
局_数据百分位 = 数值到格式文本 ( (n - 1) ÷ (局_数量 - 1), 3, )
加入成员 (局_数据百分位数组, 局_数据百分位)
输出调试文本 (“n=”到文本 (n)“ 参_数据 [n]=” + 参_数据 [n])
' 排序后的现在数据 和之前数据想等  沿用上一个百分位
加入成员 (局_数据百分位数组, 局_数据百分位)  ' 这里的局_数据百分位 是上一次循环的结果
输出调试文本 (“n=”到文本 (n)“ 参_数据 [n]=” + 参_数据 [n])

' n=1 第一次运行 第一个默认为0%
局_数据百分位 = 数值到格式文本 ( (n - 1) ÷ (局_数量 - 1), 3, )
加入成员 (局_数据百分位数组, 局_数据百分位)
输出调试文本 (“n=”到文本 (n)“ 参_数据 [n]=” + 参_数据 [n])

计次循环尾 ()
返回 ()  ' 计算完毕 有内容 返回真,不判断传入的文本型是否都为数值


返回 ()  ' 异常 空数组 返回假

子程序名返回值类型公开备 注
文本数组_排序 文本排序 可能也可以  123(2323)
参数名类 型参考可空数组备 注
文本数组文本型
排序顺序逻辑型默认假,从大到小,真=从小到大
变量名类 型静态数组备 注
整数型 
下标整数型 
整数型 
局_数量整数型 
局_数量 = 取数组成员数 (文本数组)
计次循环首 (局_数量, 数)
下标 = 数
计次循环首 (取数组成员数 (文本数组) - 数, 值)
如果 (排序顺序 = )
如果真 (StrCmpLogicalW (编码_Ansi到Unicode (文本数组 [下标]), 编码_Ansi到Unicode (文本数组 [数 + 值])) < 0)  ' <0为降序 从大到下 >0为升序 从小到大
下标 = 数 + 值

如果真 (StrCmpLogicalW (编码_Ansi到Unicode (文本数组 [下标]), 编码_Ansi到Unicode (文本数组 [数 + 值])) > 0)  ' <0为降序 从大到下 >0为升序 从小到大
下标 = 数 + 值


计次循环尾 ()
如果真 (下标 ≠ 数)
交换变量 (文本数组 [下标], 文本数组 [])

计次循环尾 ()


i支持库列表   支持库注释   
spec特殊功能支持库


  
DLL命令名返回值类型公开备 注
StrCmpLogicalW整数型 
DLL库文件名:
Shlwapi.dll
在DLL库中对应命令名:
StrCmpLogicalW
参数名类 型传址数组备 注
文本1字节集
文本2字节集




完美解决 关贴
回复 支持 反对

使用道具 举报

结帖率:95% (118/124)

签到天数: 24 天

 楼主| 发表于 2023-1-17 01:54:32 | 显示全部楼层   重庆市重庆市
这个dll排序 是2,2对比 效率很低  数据多 别用这个排序方式
回复 支持 反对

使用道具 举报

  高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表