2015-08-24 2 views
1

У меня есть образец ndarray с NaNsПрименить оцифровать() для ndarray построчно

import numpy as np 

m,n,c = 10,5,15; 
A  = np.random.randn(m,n) 
linidx = np.random.choice(A.size, c, replace=False) 
np.put(A,linidx,np.nan) 

Я хочу найти который Децильные значение принадлежит, и я хочу сделать это с помощью строки.

Следовательно, я вычислить процентили:

edges = np.nanpercentile(A,range(10,110,10),axis=1) 

, а затем мне нужно применить функцию digitize() на каждой строке A и с использованием соответствующего edge.

Я смотрел np.apply_along_axis(), но, может быть, я должен просто явно зациклять?

+0

Я не совсем уверен, но, возможно, [ '2D interpolation'] (HTTP: // документы .scipy.org/doc/scipy-0.14.0/reference/generated/scipy.interpolate.interp2d.html) может помочь? – Divakar

ответ

1

я пошел сейчас следующим раствором:

bins = np.zeros((m,n),np.int64) 
for r in range(A.shape[0]): 
    bins[r,:] = np.digitize(A[r,:], edges[r,:]) 

Быстрее или более элегантные варианты приветствуются

Смежные вопросы