как проиндексировать элемент, который был добавлен в питон 1d numpy массива - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть проблема, которую я неустанно пытался решить.У меня есть пустой массив, к которому я добавляю значения в конце (показано ниже):

array = []
for (x, y, w, h) in e:
    wm = int(x + float(w / 2))
    hm = int(y + float(h / 2)) 
    array.append([numpy.float32(wm),numpy.float32(wh)])
return numpy.array(array)

#and it gives 
[200.90489, 100.39489] #the second last 
[288.0594, 30.0950] #last
#and so on..

Я хочу индексировать array[0][-2] - array[0][-1], чтобы найти разницу между вторым последним добавленным элементом в первомстолбец (200.90489) и последний добавленный элемент в первом столбце (288.0594).Я могу индексировать столбец, но не могу индексировать строку, поскольку это 1d-массив, я пробовал множество способов преобразовать его в 2d, но он не работает.Я пробовал numpy.resize и numpy.reshape, но оба никак не помогли.
Как мне поступить?Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Убедитесь, что ваш массив имеет форму (1,2)

Затем попробуйте:

np.append(array,[numpy.float32(wm),numpy.float32(wh)], axis=0)

0 голосов
/ 11 февраля 2019

Несколько комментариев:

  • array - это ключ от numpy, вы, вероятно, не должны использовать его в качестве имени переменной.Это будет работать, но это не лучшая практика.

  • return - для возвращаемого значения в конце функции, вы не можете поместить его в цикл for (Кроме того, даже в функции цикл будет прерван при первом return)

  • Похоже, ваш результат будет двухмерным массивом, array[i][j] должен работать.Но я думаю, что вы поменялись местами i и j.

  • Не уверен, почему вы конвертируете в numpy.array, он уже работает со списками.

  • Множество явно ненужных типов: float => int => numpy.float32.Ниже я предполагаю, что вам нужно округленное целое число.

Так что, если я правильно угадал, что вы хотите сделать, это должно сработать:

my_array = []
for (x, y, w, h) in e:
    wm = int(x + w/2.)
    hm = int(y + h/2.) 
    my_array.append([wm, wh])

if len(my_array) >= 2:
    last_wm_diff = my_array[-1][0]-my_array[-2][0]
    last_hm_diff = my_array[-1][1]-my_array[-2][1]

# It will work the same if you convert to a numpy array:
my_array = numpy.array(my_array)

if my_array.shape[0] >= 2:
    last_wm_diff = my_array[-1][0]-my_array[-2][0]
    last_hm_diff = my_array[-1][1]-my_array[-2][1]

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