如何从numpy数组中索引最后附加的值行

时间:2019-05-20 20:27:20

标签: python arrays pandas numpy indexing

我有一个起始形状为(0,)-(arr = [])的数组,我将值附加到(wm,hm),因此它们会不断更新。我可以索引附加值的最后一行,但是不能索引附加值的倒数第二行。

尝试了所有可能的索引方法,例如(在这些方法中切换数字):[-1] [0],arr [-1、0],arr [-2,1],arr [-2, :],arr [-2 :: 2]等。其他时候,当我尝试索引倒数第二行时,它向我显示了轴错误,这可能是问题所在(附加操作不会添加新行,这就是我试图索引,而是覆盖旧值)。我不知道。因此,我尝试使用以下方法切换附加方法:串联,vstack,pandas。但这没有帮助。用尽所有索引组合和我已知的所有附加方法,我正在寻求帮助。

r= is an array formatted like so [[300 240 22 22]] 

arr=[] #shape is (0,)
for (x, y, w, h) in r:
    wm=int(x+ (w/2.))
    hm=int(y+ (h/2.))
    arr.append([numpy.float32(wm), numpy.float32(hm)])
return numpy.array(arr)

索引数组(在空闲状态)会提取(我复制了数组的最后两个块):

[[293.51373 323.4329 ]
  [247.77493 316.02783]]

[[292.9887  322.23425]
 [247.24142 314.2921 ]]

返回的数组的形状为(2,2)且为dtype:float32 为了澄清将来的混淆,这只是一个快照,这两行是倒数第二行,但很快就会被附加到数组中的新值行覆盖。因此它不是静态数组,因此在尝试索引倒数第二行时它不起作用。每种索引方法要么获取最后附加的行,要么获取错误(轴错误)。想象这样的两行:

[[293.51373 323.4329 ][247.77493 316.02783]] # second last row  

我想索引[293。 323.]从第二行到最后一行(附加循环的上一次迭代的最后一行,现在是倒数第二个)

[[292.9887  322.23425][247.24142 314.2921 ]] # last row-

这些是以前的索引方法无效的一些结果。

arr [[255.44836 280.92575] # i want to index this line-second to last 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 [[255.35194 281.08353] # along with this line- last 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

以上所有索引方法都为最后一行或最后一行的某些部分建立索引。 如果您有任何新的索引或附加行的方法,请告诉我!我可以消除任何混乱,这很难解释。感谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

让我们排3行r

In [3]: r = np.array([[300, 240, 22, 22],[301, 241, 22, 22] ,[302, 242, 22, 22]])                        
In [4]: r                                                                                                
Out[4]: 
array([[300, 240,  22,  22],
       [301, 241,  22,  22],
       [302, 242,  22,  22]])
In [5]: arr = []                                                                                         
In [6]: for (x, y, w, h) in r: 
   ...:     wm=int(x+ (w/2.)) 
   ...:     hm=int(y+ (h/2.)) 
   ...:     arr.append([numpy.float32(wm), numpy.float32(hm)]) 
   ...:                                                                                                  
In [7]: arr                                                                                              
Out[7]: [[311.0, 251.0], [312.0, 252.0], [313.0, 253.0]]
In [8]: arr = np.array(arr)                                                                              
In [9]: arr                                                                                              
Out[9]: 
array([[311., 251.],
       [312., 252.],
       [313., 253.]], dtype=float32)

arrr的每一行都有一行。

选择arr的最后一行:

In [11]: arr[-1,:]                                                                                       
Out[11]: array([313., 253.], dtype=float32)

秒到最后一行:

In [12]: arr[-2,:]                                                                                       
Out[12]: array([312., 252.], dtype=float32)

最后两行:

In [13]: arr[-2:,:]                                                                                      
Out[13]: 
array([[312., 252.],
       [313., 253.]], dtype=float32)

告诉我,我的例子有什么问题?为什么它与您对数组及其行的概念不匹配。

鉴于示例r,我看不到如何获得像这样的数组

[[293.51373 323.4329 ]
  [247.77493 316.02783]]

您需要给我们[mcve]-我们可以复制粘贴并运行的示例代码和数据,并获得与您相同的结果。否则,我们会一次又一次地互相交谈。