打印箱子中的元素

2024-04-20 02:53:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望我的代码只在满足if条件时打印,然后清空数组以打印下一个结果

import numpy as np
r = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
     0.0, 0.000570290882095, 0.0107443912719, 0.0124509177244, 
     0.0125, 0.0125, 0.025, 0.025, 0.025,
     0.025, 0.0256640229497, 0.030566379892, 0.031401430789,
     0.0375, 0.0375, 0.0375, 0.0395298596851, 0.039780154486, 
     0.0438643740073, 0.0466295394557, 0.0480063782397, 0.05, 
     0.05, 0.068990534098, 0.0717060855612, 0.0737078626994,
     0.0783505963591, 0.0875, 0.0875, 0.100794816139,
     0.110492949738, 0.1125, 0.125, 0.125, 0.137197807346, 
     0.140625, 0.147676814534, 0.149311786297, 0.15, 0.15,
     0.153789751195, 0.15653721735, 0.161158308383,
     0.165614224138,0.165804856115, 0.181477147577, 0.186858748434, 0.2]
for binStartLoad in np.arange(0, 1, 0.05): 
    k = []
    for i in range(len(r)):
        if binStartLoad >= r[i] < binStartLoad + 0.05:
            k.append(r[i])
    print k

现在我的结果是:

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
 0.000570290882095, 0.0107443912719, 0.0124509177244, 0.0125, 0.0125, 
 0.025, 0.025, 0.025, 0.025, 0.0256640229497, 0.030566379892,
 0.031401430789, 0.0375, 0.0375, 0.0375, 0.0395298596851, 
 0.039780154486, 0.0438643740073, 0.0466295394557, 
 0.0480063782397, 0.05, 0.05]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
 0.000570290882095, 0.0107443912719, 0.0124509177244, 0.0125, 
 0.0125, 0.025, 0.025, 0.025, 0.025, 0.0256640229497, 
 0.030566379892, 0.031401430789, 0.0375, 0.0375, 0.0375, 
 0.0395298596851,0.039780154486, 0.0438643740073, 0.0466295394557,
 0.0480063782397, 0.05, 0.05, 0.068990534098, 0.0717060855612,
 0.0737078626994, 0.0783505963591, 0.0875, 0.0875] ans so on

但我希望我的结果是:

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 
 0.000570290882095, 0.0107443912719, 0.0124509177244, 0.0125, 0.0125, 
 0.025, 0.025, 0.025, 0.025, 0.0256640229497, 0.030566379892,
 0.031401430789, 0.0375, 0.0375, 0.0375, 0.0395298596851, 
 0.039780154486, 0.0438643740073, 0.0466295394557, 
 0.0480063782397]
[0.05, 0.05, 0.068990534098, 0.0717060855612, 0.0737078626994,
 0.0783505963591,   0.0875, 0.0875]
[0.100794816139, 0.110492949738, 0.1125, 0.125, 0.125, 0.137197807346, 
 0.140625, 0.147676814534, 0.149311786297] and so on

Tags: 代码inimportnumpyforifsoon
1条回答
网友
1楼 · 发布于 2024-04-20 02:53:24

您似乎想要的是将r拆分为宽度为0.05的容器。一种更简单的方法是搜索断点索引:

# find the indices for the break points (0, 0.05, 0.10, .., 1.00)
bpoints = np.searchsorted(r, np.arange(0, 1+.01, 0.05), side='left')

# now the values 0.05 are at indices bpoints[0]..bpoints[1], etc.
# the resulting vectors are collected into `bins`
bins = [ r[bpoints[i]:bpoints[i+1]] for i in range(len(bpoints)-1) ]

那么bins就是:

[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.000570290882095, 0.0107443912719, 0.0124509177244, 0.0125, 0.0125, 0.025, 0.025, 0.025, 0.025, 0.0256640229497, 0.030566379892, 0.031401430789, 0.0375, 0.0375, 0.0375, 0.0395298596851, 0.039780154486, 0.0438643740073, 0.0466295394557, 0.0480063782397], 
 [0.05, 0.05, 0.068990534098, 0.0717060855612, 0.0737078626994, 0.0783505963591, 0.0875, 0.0875], 
 [0.100794816139, 0.110492949738, 0.1125, 0.125, 0.125, 0.137197807346, 0.140625, 0.147676814534, 0.149311786297, 0.15, 0.15], 
 [0.153789751195, 0.15653721735, 0.161158308383, 0.165614224138, 0.165804856115, 0.181477147577, 0.186858748434], 
 [0.2], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 [], 
 []]

空列表表示没有值的箱子。当然,在印刷阶段很容易摆脱这些问题:

print "\n".join([ str(b) for b in bins if len(b) > 0 ])

但是,通常需要保留空的箱子,以避免弄乱索引。你知道吗

请注意,由于浮点舍入错误导致的边界情况(例如0.15)是不可预测的。(这里0.15的结果是错误的,因为np.arange(0,1.01,0.05)[3] > 0.15True。浮点数之间通常不存在“完全相等”的情况。)

相关问题 更多 >