Многомерная гистограмма в питоне

У меня есть многомерная гистограмма

   H=histogramdd((x,y,z),bins=(nbins,nbins,nbins),range=((0,1),(0,1),(0,1)))

Мне нужно напечатать в массиве значения H, которые отличаются от нуля, и мне также нужно знать координаты/ячейки, где это происходит.

Я не знаком с кортежами. Вы можете помочь мне?


person Brian    schedule 02.08.2011    source источник
comment
Что вы используете для построения гистограмм? Какое/где определение histogramdd?   -  person Karl Knechtel    schedule 02.08.2011
comment
Это стандартная функция numpy (nullege.com/codes/search/numpy.histogramdd ). У меня есть набор точек с координатами x, y, z и диапазоном от 0 до 1. Я погружаю куб в n бинов и подсчитываю, сколько точек у меня есть в этих бинах. Мне просто нужно получить доступ к этим точкам.   -  person Brian    schedule 02.08.2011
comment
Предполагается, что первым параметром являются данные выборки. Гистограмма хранит несколько точек; в вашей примерной строке кода вы описали одну точку: (x, y, z). Вместо этого у вас должно быть что-то вроде ((x1, y1, z1), (x2, y2, z2), ...). В результате получается ndarray, поэтому я не совсем понимаю, почему вы спрашиваете о кортежах.   -  person Karl Knechtel    schedule 02.08.2011
comment
Извиняюсь. Я забыл написать, что мои x, y и z сами являются массивом. x=(x1,x2,x3...), то же самое для y и z.   -  person Brian    schedule 02.08.2011
comment
Подожди, подожди, подожди. У вас есть массив всех координат x для ваших точек, а затем массив всех координат y, а затем массив всех координат z? И вы хотите сопоставить их, чтобы заработать очки? Это настоящий вопрос?   -  person Karl Knechtel    schedule 02.08.2011
comment
Да, это так. У меня есть набор трехмерных точек в кубе размера 1, и мне просто нужно посчитать, сколько из них находится в выбранных мной ячейках. Вот и все. Извините, если я был неясен.   -  person Brian    schedule 02.08.2011


Ответы (1)


используйте, где найти индекс nozeros в H, и используйте индекс, чтобы получить координату:

import numpy as np
x = np.random.random(1000)
y = np.random.random(1000)
z = np.random.random(1000)
nbins = 10
H, [bx, by, bz]=np.histogramdd((x,y,z),bins=(nbins,nbins,nbins),range=((0,1),(0,1),(0,1)))

ix, iy, iz = np.where(H)

for t in zip(bx[ix], by[iy], bz[iz], H[ix,iy,iz]):
    print t
person HYRY    schedule 02.08.2011