1

我有需要对数组进行 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 的不同数据集),所以len(my_array) == len(list_of_my_bin_lists). 这里是list_of_my_bin_lists = [my_bin_list1, my_bin_list2, ...]。所以我需要告诉 digitize,对于第一个数组元素,它应该检查list_of_my_bin_lists[0]该元素所属的 bin,对于第二个元素,list_of_my_bin_lists[1]以此类推。那可能吗?我会想象类似的东西

list_of_my_bin_lists = [[2, 6, 9], [4, 6, 8], [3, 5, 9]]
my_array = np.array([1, 3, 7])
digitized = numpy.digitize(my_array[i], my_bins[i] for i in len(my_array))

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

4

1 回答 1

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成为s中的一个list,则此方法有效。int如果你想让它成为一个np.array或什么,它应该很容易将它重铸成你需要的任何东西。

于 2014-02-12T22:50:49.640 回答