Я хочу проиндексировать вторую до последней строки массива numpy У меня есть цикл, который постоянно добавляет новые строки:
arr2= is an array formatted like so [[300 240 22 22]]
так что в примере выше x=300 y=240 w=22 h=22
эти числа обрабатываются в уравнении до тех пор, пока wm не будет иметь 2 числа, поэтому [200, 300] и hm также имеют 2 числа [200, 300], и оба NON-STOP добавляются в конец arr (не создавая новые массивы, а добавляя к одному массиву Таким образом, это будет выглядеть примерно так: постоянное добавление новых строк (я не знаю, действительно ли это добавляет новые строки или переопределяет старые значения):
----row [[301.77325 225.71806][366.08594 232.20958]]
----row [[301.54193 225.93848][365.76663 232.37358]]
---- [[300.9011 225.27153][365.21063 231.52242]]second to last appended
row
---- [[300.63205 223.20387][364.91928 229.46263]]last appended row
then there would be another row being appended this is just a snapshot
код:
arr=[] #shape is (0,)
for (x, y, w, h) in arr2:
wm=int(x + (w/2))
hm=int(y + (h/2))
arr.append([wm, hm])
simplified version:
arr=[]
for (x, w) in arr2:
wm=int(x + (w/2))
arr.append([wm])
Неупрощенный код создает массив формы (2,2) с типом dtype:float32.
column (wm) column(hm)
| |
| |
[[293.51373 323.4329 ] # second to last row
[247.77493 316.02783]]
[[292.9887 322.23425]
[247.24142 314.2921 ]]
Вот несколько примеров методов индексации, которые я пробовал (вместе с массивом) (это две последние добавленные строки массива):
arr [[255.44836 280.92575] # I want to index this line-second to last appended row
[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[-2::2] [255.44836 280.92575]
arr [[255.35194 281.08353] # along with this line-last appended row
[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
arr[-2::2] [255.35194 281.08353]
В других случаях, когда я пытаюсь проиндексировать предпоследнюю строку, она показывает мне ошибку оси, которая может быть проблемой (что добавление не добавляет новые строки, которые я пытаюсь проиндексировать, а скорее переопределяет старые значения). Я не знаю. Поэтому я попытался переключить метод добавления с помощью: concatenate, vstack, pandas. Но это не помогло. Все, что я хочу сделать, это найти разницу между последней и предпоследней добавленными строками из второго столбца в элементе wm (в примере 280.92575-281.08353), а также то же самое с первым столбцом элемента wm (255.44836-255.35194). ). Все различные методы индексации не извлекали предпоследнюю строку, а только последнюю строку. Пожалуйста, дайте мне знать, есть ли другой способ индексации предпоследней строки другим способом или есть ли другие методы индексации, которые я еще не пробовал. Извините, если это сбивает с толку, все еще разбираюсь с этим. Я могу попытаться прояснить любую путаницу. Заранее спасибо!
Похоже, вы пытаетесь нарисовать ограничивающую рамку. не могли бы вы привести простой и понятный пример? Этот не..
@mkrieger1 [-2] индексирует последнюю строку (255.35194 281.08353), а не предпоследнюю строку (255.44836 280.92575)






Если вы хотите индексировать последний элемент списка, используйте
arr[-1]
Если вы хотите индексировать предпоследний элемент, используйте
arr[-2]
Однако убедитесь, что ваш массив достаточно длинный. Если в вашем массиве есть только 1 элемент, и вы хотите проиндексировать предпоследний элемент, это приведет к ошибке.
Ну, для других массивов [-1] и [-2] будут работать, так что у вас есть правильное представление, но для меня они не индексируют правильные вещи. Как показано в приведенных выше примерах.
Можете ли вы привести пример «arr» и что именно вы хотите проиндексировать?
Что ж, привести пример немного сложно, потому что он всегда обновляется, поэтому, если я сделаю снимок одного раздела, люди думают, что это весь массив, но это только последняя добавленная строка, поэтому (каждый --arr указывает новую строку): ----arr [[273.5383 203.26279] [339.77667 209.72774]]-third last ----arr [[273.3976 203.5339 ] [339.6704 209.93922]]-second last ----arr [[273.3121 203.85924] [339.57697 210.15872]] - last appended row
Я полагаю, это потому, что мой массив имеет размер 2, но ось 0. Поэтому, если я хочу индексировать 2, он получает IndexError: индекс 2 выходит за пределы оси 0 с размером 2.
Если я правильно понял ваше описание, то должно работать следующее:
In [49]: arr
Out[49]:
array([[255.44836, 280.92575],
[298.6107 , 285.75986],
[255.35194, 281.08353],
[298.45673, 285.88693]])
In [50]: arr[0] - arr[-2]
Out[50]: array([ 0.09642, -0.15778])
# accessing elements in a `forward manner`
In [51]: arr[0] - arr[2]
Out[51]: array([ 0.09642, -0.15778])
# accessing elements in a `reverse manner` using negative indices
In [52]: arr[-4] - arr[-2]
Out[52]: array([ 0.09642, -0.15778])
# or mix both
In [50]: arr[0] - arr[-2]
Out[50]: array([ 0.09642, -0.15778])
Вы можете использовать как прямое индексирование, так и обратное индексирование или смешанное, в зависимости от того, что вам удобно.
Ну, там только один массив. Который я добавляю новые строки значений. Таким образом, arr1[0]-arr2[0] не работает. Теперь arr[0] индексирует последнюю строку, но тогда мне также нужно иметь возможность индексировать предпоследнюю строку. Arr - это массив, который постоянно обновляется (добавляется) новыми значениями, и все, что я хочу знать, это как индексировать предпоследнюю строку добавленных значений.
Я обновил ответ. Надеюсь, это решит вашу проблему. Если нет, дайте мне знать. Кроме того, пожалуйста, приведите хороший простой пример. Ваш текущий пример настолько запутан...
Я предоставил упрощенную версию, то есть настолько, насколько я мог ее упростить. Кроме того, arr[0]-array[2] выдает IndexError: индекс 2 выходит за границы для оси 0 с размером 2. Аналогично для arr[-4]-arr[-2] IndexError: index-4 выходит за границы для оси 0 с размером 2. Что касается [0]-[-2], он извлекает [0. 0.]. Я обнаружил, что первый [] индексирует элемент wm[0] или hm[1], а второй [] индексирует один из двух столбцов значений внутри каждого элемента. Поэтому я либо получаю другое значение индексации ([0][1][-2]), которое выдает ошибку.
Или я удаляю hm, который с моим недавним открытием на самом деле является столбцом (я добавил визуальное представление), поэтому он не идеален, но даже с массивом, имеющим только столбец wm, [0][-2] извлекает IndexError: list index вне диапазона. Итак, теперь я исчерпал все варианты, о которых только мог подумать, поэтому я спрашиваю сообщество. Мне сложно все это объяснять, но надеюсь, вы поняли!
Что не так с
[-2]?