Как проиндексировать вторую добавленную строку?Numpy и Python - PullRequest
0 голосов
/ 22 апреля 2019

Я был озадачен этим довольно долгое время. Как проиндексировать вторую добавленную строку?

Я пробовал почти все возможные комбинации индексации, пытаясь проиндексировать вторую до последней добавленной строки, все возвращая либо последнюю строку, либо ошибку. Вот некоторые из методов, которые я пробовал (с переключением чисел внутри этих методов): [- 1] [0], arr [-1, 0], arr [-2,1], arr [-2,: ] и т. д. Я использую цикл ниже.

r= is an array formatted like so [[300 240 22 22]] 

arr=[] #shape is (0,)
for (x, y, w, h) in r:
    wm=int(x+ (w/2.))
    hm=int(y+ (h/2.))
    arr.append([numpy.float32(wm), numpy.float32(hm)])
return numpy.array(arr)

Это производит Индексирование массива (в режиме ожидания) выборок (я скопировал последние два блока массива):

[[293.51373 323.4329 ]
  [247.77493 316.02783]]

[[292.9887  322.23425]
 [247.24142 314.2921 ]]

the shape of the returned array is (2,2) and is dtype:float32

В моей программе это отображается как (тот же массив)
--wm element ------------------ hm element
[[293.51373 323.4329 ][247.77493 316.02783]] Я считаю, что это от второго до последнего ряда
[[292.9887 322.23425][247.24142 314.2921 ]] и я подумал, что это последний ряд

Что вызвало у меня некоторую путаницу, потому что они отображаются немного по-другому (простой показывает, что массив состоит из 2 строк, а другой показывает, что это одна прямая линия)

Вот некоторые примеры методов индексации (вместе с массивом) (это две последние последовательные строки из массива):

arr [[255.44836 280.92575] # i want to index this line
 [298.6107  285.75986]]
arr[-1] [298.6107  285.75986]
arr[-2] [255.44836 280.92575]
arr[-2][0] 255.44836
arr[:,0] [255.44836 298.6107 ]
arr[-1,:] [298.6107  285.75986]
arr[-2,0] 255.44836

arr [[255.35194 281.08353] # along with this line
 [298.45673 285.88693]]
arr[-1] [298.45673 285.88693]
arr[-2] [255.35194 281.08353]
arr[-2][0] 255.35194
arr[:,0] [255.35194 298.45673]
arr[-1,:] [298.45673 285.88693]
arr[-2,0] 255.35194  

В других случаях, когда я пытаюсь проиндексировать вторую и последнюю строку, это показывает мне ошибку оси, которая может быть проблемой (то, что добавление не добавляет новые строки, что я пытаюсь проиндексировать, а переопределяет старую) ценности). Я не знаю. Поэтому я попытался переключить метод добавления с помощью: concatenate, vstack, pandas. Но это не помогло.
Все, что я хочу сделать, это найти разницу между последней и второй и последней строками второго столбца в элементе wm (в примере 280.92575-281.08353), а также то же самое с первым столбцом элемента wm (255.44836-255.35194) , Все различные методы индексации не извлекали вторую-последнюю строку только последнюю строку. Пожалуйста, дайте мне знать, если есть другой способ индексации второй и последней строки другим способом или есть другие методы индексации. Извините, если это сбивает с толку все еще привыкаю к ​​этому. Я могу попытаться устранить любую путаницу. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Эти два дисплея - это одно и то же, массив формы (2,2).

[[293.51373 323.4329 ]
 [247.77493 316.02783]]

[[293.51373 323.4329 ][247.77493 316.02783]]

Скобки [] обозначают структуру массива, а не разрывы строк.

0 голосов
/ 22 апреля 2019

Я думаю, что вы ищете ответ:

Arr[-2::2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...