首页 > 解决方案 > 如何索引已附加到 1d numpy 数组 python 的元素

问题描述

我有一个问题,我一直在努力解决。我有一个 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],以便我可以找到第一列中倒数第二个附加元素 (the 200.90489) 和第一列中最后一个附加元素(the ) 之间的差异288.0594。我可以索引列,但我不能索引行,因为它是一维数组,我尝试了多种方法将其转换为二维,但它不起作用。我试过了numpy.resizenumpy.reshape但两者都没有帮助。
我该怎么办?提前致谢!

标签: pythonarraysnumpy

解决方案


几点评论:

  • array是 numpy 的一个关键,你可能不应该将它用作变量名。它会起作用,但这不是最佳实践。

  • return用于函数末尾的返回值,不能将其放入for循环中(另外,即使在函数中,循环也会在第一次中断return

  • 看起来您的结果将是一个二维数组,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]


推荐阅读