我有两个这样的列表
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
中的元素第一次大于sample_series ,请返回cum_array
中的前一个元素并中断循环
例如,540
中的cum_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
答案 0 :(得分:2)
在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])
答案 1 :(得分:1)
问题是您无条件break
进入内部for循环。另一个问题是,当您的条件为true并且j
为零时,您可能会超出cum_array的范围。
请尝试以下更正的代码:
sampled_series = [ 488, 1223, 1958, 2693, 3428]
cum_array = [ 100, 190, 340, 540, 590, 940, 1340, 1410, 1640, 2040, 2940, 3396, 3630, 3675]
for i in range(0, len(sampled_series)):
for j in range(0, len(cum_array)):
if sampled_series[i]<cum_array[j] and j>0:
print(cum_array[j-1])
break
编辑:我忘了打破循环
答案 2 :(得分:1)
<form method="post" action="foo" enctype="multipart/form-data" id="document-form">
<div class="modal-body">
<input id="files" type="file" name="files" required/>
<input name="description" required/>
<div class="modal-footer">
<button type="submit" class="k-button">Dodaj</button>
</div>
</form>
$('#files').kendoUpload(
{
multiple: false,
validation: {
minFileSize: 1
}
}
)