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

问题描述 投票:-1回答:2

我想索引一个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]并且都是非自动跟踪附加到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) )。所有各种索引方法都没有获取最后一行的倒数第二行。如果有不同的方法以不同的方式索引倒数第二行或者是否有其他索引方法我还没有尝试过,请告诉我。对不起,如果它仍然让人感到困惑。我可以尝试解决任何困惑。提前致谢!

python arrays numpy indexing computer-vision
2个回答
0
投票

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

arr[-1]

如果要索引第二个到最后一个项目使用

arr[-2]

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


0
投票

如果我正确理解您的描述,那么以下内容应该有效:

  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])

您可以使用正向索引或反向方式索引或混合,以方便的方式。

© www.soinside.com 2019 - 2024. All rights reserved.