如何索引numpy数组python的倒数第二行

Dev*_*per 1 python arrays indexing numpy computer-vision

我想索引一个 numpy 数组的倒数第二行我有一个不断追加新行的循环:

arr2= is an array formatted like so [[300 240 22 22]] 
Run Code Online (Sandbox Code Playgroud)

所以在上面的例子中 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
Run Code Online (Sandbox Code Playgroud)

代码:

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])
Run Code Online (Sandbox Code Playgroud)

非简化代码生成一个形状为 (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 ]]
Run Code Online (Sandbox Code Playgroud)

这些是我尝试过的索引方法的一些示例(以及数组)(这些是数组的最后两个附加行):

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]
Run Code Online (Sandbox Code Playgroud)

其他时候,当我尝试索引倒数第二行时,它会向我显示一个轴错误,这可能是问题所在(附加不会添加我想要索引的新行,而是覆盖旧值)。我不知道。所以我尝试使用以下方法切换附加方法:concatenate、vstack、pandas。但它没有帮助。我想要做的就是找到 wm 元素中第二列的最后和倒数第二行之间的差异(在示例中为 280.92575-281.08353),并且与 wm 元素的第一列(255.44836-255.35194)相同)。所有各种索引方法都没有只提取最后一行的倒数第二行。请让我知道是否有不同的方式以不同的方式索引倒数第二行,或者是否有我尚未尝试过的其他索引方法。对不起,如果它仍然令人困惑,仍然掌握它。我可以尝试消除任何混淆。提前致谢!

sli*_*lin 7

如果要索引列表的最后一项,请使用

arr[-1]
Run Code Online (Sandbox Code Playgroud)

如果要索引倒数第二个项目,请使用

arr[-2]
Run Code Online (Sandbox Code Playgroud)

但是请确保您的阵列足够长。如果您的数组只有 1 个项目并且您想要索引倒数第二个项目,则会导致错误。