2016-10-13 6 views
5

У меня есть большой двумерный массив arr, который я хотел бы поместить на вторую ось с помощью numpy. Поскольку np.histogram сглаживает массив настоящее время я использую для цикла:Объединение данных вдоль одной оси в numpy

import numpy as np 

arr = np.random.randn(100, 100) 

nbins = 10 
binned = np.empty((arr.shape[0], nbins)) 

for i in range(arr.shape[0]): 
    binned[i,:] = np.histogram(arr[i,:], bins=nbins)[0] 

Я чувствую, что должен быть более прямой и более эффективный способ сделать это в NumPy, но мне не удалось найти.

ответ

4

Вы можете использовать np.apply_along_axis:

x = np.array([range(20), range(1, 21), range(2, 22)]) 

nbins = 2 
>>> np.apply_along_axis(lambda a: np.histogram(a, bins=nbins)[0], 1, x) 
array([[10, 10], 
     [10, 10], 
     [10, 10]]) 

Основное преимущество (если таковые имеются) в том, что он немного короче, но я не ожидал бы большую часть прироста производительности. Это может быть немного более эффективно в сборке результатов за ряд строк.

-3

Вы должны использовать numpy.histogramdd, специально предназначенный для вашей проблемы

+1

Я не совсем понимаю, как это сделать. Я понимаю, что 'histogramdd' построен для создания многомерных гистограмм, но я хочу получить несколько одномерных гистограмм. – obachtos

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