python - 根据特定的布尔条件选择 Numpy 数组中的一些元素
问题描述
我有两个这样的列表
sampled_series = [ 488, 1223, 1958, 2693, 3428]
cum_array = [ 100, 190, 340, 540, 590, 940, 1340, 1410, 1640, 2040, 2940, 3396, 3630, 3675]
我想做以下操作。
取第一个元素
sampled_series
并将其与cum_array
.如果第一次
cum_array
大于sampled_series中的元素,则返回前一个元素并中断循环cum_array
- 再做同样的操作
例如540
incum_array
大于 的第一个元素sampled_array
,即488
在这种情况下打印值340
,它是前一个元素
我写的代码是这样的:
for i in range(0, len(sampled_series)):
for j in range(0, len(cum_array)):
if sampled_series[i]<cum_array[j]:
print(cum_array[j-1])
break
当我运行代码时,没有错误,但我也看不到任何打印内容。代码运行顺畅,没有任何错误,也没有任何输出。
我期望看到的是这个
340
940
1640
2040
3396
PS:我试图通过这个程序完成与大小抽样成比例的概率。
这是什么
https://en.wikipedia.org/wiki/Sampling_%28statistics%29#Probability-proportional-to-size_sampling
解决方案
有一种快速的方法可以做到这一点numpy
。searchsorted
我将您的列表转换为 numpy 数组,然后通过 searchsorted 查找应插入元素以保持顺序的索引:
ss = np.array([ 488, 1223, 1958, 2693, 3428])
ca = np.array([ 100, 190, 340, 540, 590, 940, 1340, 1410, 1640, 2040, 2940, 3396, 3630, 3675])
idx=np.searchsorted(ca,ss)
由于您想要以前的值,请减去一个:
result=ca[idx-1]
#array([ 340, 940, 1640, 2040, 3396])
推荐阅读
- python - python中是否有可以从当前日期/给定日期生成日期4周的函数?
- android - OnActivityResult Kotlin
- sql - SQL 选择列值作为自定义名称
- git - 如何在 git 存储库中创建 .gitignore 文件并在此 .gitignore 文件中添加文件/文件夹的名称,以便 git 可能不会跟踪这些文件
- python - Pretty print a dictionary matrix in Python
- javascript - 如何让本地函数读取其他单独的本地函数?
- azure - 在 azure 上创建 ejbca docker 容器时出现容器错误“无法通过 uid 找到用户”
- android - Android Studio CMake 链接库失败
- microsoft-graph-api - Microsoft Graph API 筛选器不提供合规性标记字段
- sql - 为什么 DatePart / DateAdd 导致算术溢出错误将表达式转换为数据类型 int 错误