1

Я новичок в Python, так что я нужна помощь с этим:Получение индекса некоторого элемента в массиве Numpy 2D

У меня есть 2D массив чисел, представляющих плотность окружности материала в пространстве и Я хочу найти центр. Итак, я хочу получить индекс чисел, представляющих диаметр, а затем средний индекс будет центром. В этом коде я сохраняю только значение плотности: tempdiameter.append (cell) Я хочу индекс самой ячейки. Как мне это сделать. Также я не хочу использовать списки для диаметра. так как я могу создать динамический массив 1D np? Благодаря

for row in x: 
    for cell in row: 
     if cell!=0: 
      tempdensity+=cell 
      tempdiameter.append(cell) 

    if tempdensity>maxdensity: 
      maxdensity=tempdensity 
      if len(tempdiameter)>=len(diameter): 
        diameter=tempdiameter 

    tempdensity=0 
    tempdiameter=[] 
+2

, чтобы быть более понятным и помочь нам быть полезными. можете ли вы дать простой пример своих данных и с чем вы хотите? простой ввод, вывод будет совершенным – farhawa

ответ

0

Чтобы получить строку с наибольшим числом ненулевых ячеек и самой высокой суммой вы можете сделать

densities = x.sum(axis=1) 
lengths = (x > 0).sum(axis=1) 
center = x[(densities == densities.max()) & (lengths == lengths.max()] 

Try, чтобы избежать использования петель в numpy. Дайте мне знать, если вы этого не хотите, и я постараюсь ответить на него лучше. При задании вопроса вы должны указать ввод/вывод образца. Вы также можете изменить свой вопрос, а не добавлять комментарии.

+0

да Я пытаюсь достичь самой длинной строки с ненулевыми значениями и с наибольшей суммой плотности. который должен соответствовать диаметру круга, а затем, сохраняя все индексы этих ненулевых элементов. Средний индекс должен быть центром круга, а половина длины индекса - радиусом. так вот 5x5 образец 2D NumPy массива: [[0. 0. 0. 0. 0.] [0 0,2 0,4 0,2 0] [0 0,4 0,4 ​​1. 0.] [0 0,2 0,4 0,2 0] [0. 0. 0. 0. 0.]] –

+0

и выход должен быть: линия максимальной плотности: 1,8, которые соответствуют плотности диаметра длина диаметра = 3 радиус = 1,5 area = 7.06858347058 center location = [2, 2] Я попробую то, что вы написали сейчас. Спасибо за помощь Могу ли я использовать многоугольный модуль для распознавания таких геометрий, верно? –

+0

, так как я больше не могу редактировать 1-й комментарий, вот что я хочу четко. В действительности массив будет 1000x500 с более чем одним кругом внутри. и я хочу получить центр каждого из них, а также радиус, чтобы я мог рассчитать площадь и построить изображение. есть ли хорошо известный способ сделать это? выход в этот пример должен быть [2,2] центральным положением и 1,5 радиусом. Спасибо и извините за несколько комментариев, это мой первый пост '[[0. 0. 0. 0. 0.]' '[0. 0.2 0.4 0.2 0.]' '[0. 0.4 1. 0.4 0 .] ' ' [0. 0.2 0.4 0.2 0.] ' ' [0. 0. 0. 0. 0.]] ' –

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