2014-02-12 44 views
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, ...]。 所以我需要告訴數字化,對於第一個數組元素,它應該檢查該元素所屬的list_of_my_bin_lists[0]的哪個元素,對於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]

+0

'np.digitize'和'np.searchsorted'都不能用多維分檔工作,所以沒有明顯的方法可以在沒有循環的情況下高效地完成。 – Jaime

回答

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]

這工作假設你要digitizedintlist秒。如果你想要它是一個np.array什麼的,它應該很簡單,重鑄它到你需要的任何東西。