2015-06-22 5 views
2

преобразовать список целых чисел в два dimensinal массива, как это:находят индексы х, у матрицы конкретных значений в питоне

data = numpy.array(l) 
shape = (10, 30) 
data = data.reshape(shape) 

Я стараюсь, чтобы получить индексы х, у матрицы значения, которые больше определенного порога и ниже некоторого другого порога.

Я попытался сделать следующий, но она дает некоторые ошибки:

data_indices = numpy.where(data<=obj_value_max and data>=obj_value_min) 

Ошибка:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

ответ

1

Вы должны изменить свою where линию на что-то вроде:

data_indices = numpy.where((data<=obj_value_max) & (data>=obj_value_min)) 

Обратите внимание на ()s вокруг каждого условного предложения и использования & (что означает «и»). Это работает, потому что в numpy <,<=,>,>=,&,|,... переопределены, то есть они действуют иначе, чем в родном python. and и or нельзя переопределить, и именно поэтому вы получаете сообщение об ошибке, которое вы получаете.

Чтобы получить пар индексов для каждого значения (вместо (массив индексов х, у массива индексов)), сделать

zip(*data_indices) 
+0

Здравствуйте, спасибо за ответ, он работает сейчас! но я могу задать другой q? Если я печатаю data_indices, я получаю: (массив ([0, 0, 0, ..., 599, 599, 599], dtype = int64), массив ([20, 33, 36, ..., 783, 792, 799], dtype = int64)) Как я могу получить его, как в словаре? – axcelenator

+0

Какую цель ставите перед собой? Вы хотите получить пару (x, y) для значения таких данных, что 'value_min => data> = value_min'? Вывод, который у вас есть, по существу '(array_of_x_inds, array_of_y_inds)'. – wflynny

+0

Да, я хочу пары '(x, y)', как вы писали: '(array_of_x_inds, array_of_y_inds)' – axcelenator