将数组数字化为几个二进制列表

时间:2014-02-12 22:36:46

标签: python arrays sorting numpy binning

我遇到的情况是我需要numpy.digitize一个数组。 比如,代码是

my_bin_list = [3, 6, 9]
my_array = np.array([1,2,3,4,5,6,7,8,9])
digitized = numpy.digitize(my_array, my_bins)

这很好用。但是,问题是我没有像示例中那样的一个bin列表,但是my_array中每个元素只有一个bin列表(因为每个元素属于具有自己的bin的不同数据集),因此{{1} }。这是len(my_array) == len(list_of_my_bin_lists)。 所以我需要告诉digitize,对于第一个数组元素,它应该检查该元素所属的list_of_my_bin_lists = [my_bin_list1, my_bin_list2, ...]哪个bin,对于list_of_my_bin_lists[0]的第二个元素依此类推。 那可能吗?我会想象像

这样的东西
list_of_my_bin_lists[1]

必须返回数字化:[0,0,2]

1 个答案:

答案 0 :(得分:1)

你可以使用接近你想象的列表理解来做到这一点:

import numpy as np

list_of_my_bin_lists = [[2, 6, 9], [4, 6, 8], [3, 5, 9]]
my_array = np.array([1, 3, 7])
digitized = [np.digitize(np.array([item]), bin_list)[0]
             for item, bin_list
             in zip(my_array, list_of_my_bin_lists)]

结果:digitized == [0, 0, 2]

这可以假设您希望digitized成为list int个。如果你想让它成为np.array或者什么东西,那么将它重新制作成你需要的东西应该是直截了当的。