2015-09-24 2 views
1
[A,I] = histc([0.9828 0.4662 0.5245 0.9334 0.2163],[0.0191 0.2057 0.2820 0.2851 1.0000]) 

То есть код MATLAB с результатами:Как копировать эту функцию matlab в numpy?

A = 

    0  1  0  4  0 


I = 

    4  4  4  4  2 

Что мне нужно I. Я попытался с помощью np.histogram, но это дает мне это:

>>> a,b = np.histogram([0.9828 , 0.4662 , 0.5245 , 0.9334 , 0.2163],[0.0191 , 0.2057 , 0.2820 , 0.2851 , 1.0000]) 
>>> a 
array([0, 1, 0, 4]) 
>>> b 
array([ 0.0191, 0.2057, 0.282 , 0.2851, 1. ]) 

Я хочу чтобы получить ячейки, в которые входит каждый элемент моего массива/матрицы.

+2

Вы сравнили документацию между двумя? Их функциональность не то же самое. – excaza

+0

См. Документ здесь http://docs.scipy.org/doc/numpy/reference/generated/numpy.histogram.html –

+0

Есть ли способ в numpy получить индексы, которые каждый элемент в моей матрице/массиве сортируется? Мне нужно знать, к какому бину относится каждое значение в моей матрице. – power2

ответ

6

Что вы ищете numpy.digitize:

Возвращенных индексы бункеров, к которым принадлежит каждому значению входного массива.

>>> a = np.digitize([0.9828 , 0.4662 , 0.5245 , 0.9334 , 0.2163],[0.0191 , 0.2057 , 0.2820 , 0.2851 , 1.0000]) 
>>> print(a) 
[4 4 4 4 2] 
+0

спасибо! это то, что я искал – power2

+0

Это тоже актуально. Кто-то отметил вышеупомянутый связанный пост как дубликат, поэтому я решил действовать по нему, как это казалось правильным. Я удалил дубликат, потому что это, безусловно, отвечает на вопрос. Очень хорошо. – rayryeng

+0

@ power2 Тогда, пожалуйста, отметьте мой ответ как правильный, чтобы другие могли его найти. – TheBlackCat

0

numpy.digitize сами по себе не является полным воспроизведение Matlab histc. Это работает:

import numpy as np 

def histc(X, bins): 
    map_to_bins = np.digitize(X,bins) 
    r = np.zeros(bins.shape) 
    for i in map_to_bins: 
     r[i-1] += 1 
    return [r, map_to_bins] 

if __name__=="__main__": 
    X = np.array([0.9828, 0.4662, 0.5245, 0.9334, 0.2163]) 
    bins = np.array([0.0191, 0.2057, 0.2820, 0.2851, 1.0]) 
    [A,I] = histc(X, bins) 
    print("X", X) 
    print("bins", bins) 
    print("A",A,"expecting", [0, 1, 0, 4, 0]) 
    print("I",I,"expecting", [4, 4, 4, 4, 2]) 
Смежные вопросы