我想创建一个具有不同bin大小和增量的bin值字典。例如,
Starting increment is 5, through 10 (e.g. 0-5, 6-10)
Then, increments of 10, through 100 (e.g. 11-20, 21-30...91-100)
Then increments of 25, through 200 (e.g. 101-125, 126-150...176-200)在字典里,
bin_dict = {0-10 :[0-5, 6-10], 10-100:[11-20, 21-30, ...91-100], 100-200:[101-125, 126-150..]}我尝试了以下代码:
def create_bin_ranges(bn_val):
## Create a list of bin ranges.
dict_bin_ranges = {}
list_bin_ranges = []
for i in bn_val:
step = i
bin_range = np.arange(0, step+i, step)
list_bin_ranges.append(bin_range)
dict_bin_ranges[i] = list_bin_ranges
return dict_bin_ranges我得到的结果:(这不是我想要的)
values = create_bin_ranges([5,10,100])
print(values)
>> {5: [array([0, 5]), array([ 0, 10]), array([ 0, 100])],
10: [array([0, 5]), array([ 0, 10]), array([ 0, 100])],
100: [array([0, 5]), array([ 0, 10]), array([ 0, 100])]}我被卡住了,任何建议或帮助都是很棒的。
发布于 2020-05-08 18:06:47
我认为你首先需要清楚地定义bin背后的逻辑。一种解决方案是为range随以下条件变化的所有步骤定义一个列表:
start_binend_binstep对于该示例,这将导致:
steps = [(0, 10, 5), (10, 100, 10), (100, 200, 25)]一旦我们知道要去哪里,就很容易构建所有的回收站:
在这里,我使用str.format为输出键定义了一个自定义函数。
def f(v1, v2):
return "{}-{}".format(str(v1), str(v2))然后构建列表:
# List + dict comprehension
out = {f(min_, max_): [[i+1, i+step] for i in range(min_, max_, step)] for min_, max_, step in steps}
# Or with nested for loops
out = {}
for min_, max_, step in steps:
bin_ = []
for i in range(min_, max_, step):
bin_.append([i+1, i+step])
out[f(min_, max_)] = bin_
print(out)输出
# {
# '0-10': [[1, 5], [6, 10]],
# '10-100': [[11, 20], [21, 30], [31, 40], [41, 50], [51, 60], [61, 70], [71, 80], [81, 90], [91, 100]],
# '100-200': [[101, 125], [126, 150], [151, 175], [176, 200]]
# }希望这能有所帮助!
https://stackoverflow.com/questions/61674552
复制相似问题