如何索引已附加到一维numpy数组python的元素

时间:2019-02-10 21:03:38

标签: python arrays numpy

我有一个我一直在努力解决的问题。我有一个numpy数组,该数组在末尾附加了值(在下面进行了演示):

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)和第一列中倒数第二个元素({{ 1}})。 我可以为该列编制索引,但由于该列是一维数组,因此无法为该行编制索引,我尝试了多种方法将其转换为2d格式,但是它不起作用。我尝试过288.0594numpy.resize,但都没有帮助。
我将如何处理? 预先感谢!

2 个答案:

答案 0 :(得分:0)

一些评论:

  • array是numpy的按键,您可能不应该将其用作变量名。可以,但是不是最佳实践。

  • return用于函数结尾处的返回值,您不能将其放在for循环中(另外,即使在函数中,循环也将在以下位置中断第一个return

  • 看来您的结果将是一个2D数组,array[i][j]应该可以工作。但是我认为您交换了ij

  • 不确定为什么要转换为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]

答案 1 :(得分:0)

确保数组的形状为(1,2)

然后尝试:

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