使用代码

时间:2019-04-14 04:13:31

标签: python arrays numpy opencv indexing

我有一个由(my_array = []初始化并且形状为(0,))的numpy列表,然后将wm和hm元素附加到其上,所以(r是级联形式为-[ [300 240 22 22]]):

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

该代码产生: wm元素hm元素 [[270.01 303.43] [310.17 306.37]]#倒数第二行 [[269.82 303.38] [310.99 306.86]]#最后一行 返回数组的形状为(2,2),其形状为dtype:float32

现在的问题是,当我尝试添加303.43时,理论上它将是[-2] [1],但索引为303.38。很好,但我还需要索引303.43。

我发现,第一个[]索引wm [0]或hm [1]元素,然后第二个[]索引每个元素内部的两列值之一

-例如[0] [-1]索引wm元素[0]和最后一行[-1]我也想索引倒数第二行并尝试[0] [-2],但它没有无法正常工作(索引269.82)。

所以我尝试了[0] [1] [-2],但由于IndexError:标量变量的索引无效而无法使用。

我要做的就是查找wm元素中2列的最后一行与倒数第二行之间的差异(因此,在上面的示例中,它是269.82-270.1 = -0.19和303.38-303.43 =- 0.05)。其他问题中提出的所有解决方案均无效([0] [-1],[-1] [0],您可以自己尝试找出答案)索引无效。那么有没有办法解决这个问题呢?请充分解释一下,因为我对此还是有点陌生​​!预先感谢!

添加: 取最后两个数据块
索引数组(在空闲状态)获取(我复制了数组的最后两个块):
   [[293.51373 323.4329 ] [247.77493 316.02783]]

[[292.9887  322.23425]
 [247.24142 314.2921 ]]

在我的程序中,它显示为(同一数组)
--wm元素------------------ hm元素
[[293.51373 323.4329 ][247.77493 316.02783]]我认为这是倒数第二行
[[292.9887 322.23425][247.24142 314.2921 ]],我认为这是最后一行

这给我带来了很多困惑,但是直到现在,我都忽略了它们显示方式的细微差别。现在,问题是如何为323.4329和293.51373数字建立索引,如果可以分别为它们建立索引会更好?

1 个答案:

答案 0 :(得分:1)

示例r

In [41]: r = np.array([[0,0,8,10],[1,1,6,8],[2,2,10,12]])                            
In [42]: r                                                                           
Out[42]: 
array([[ 0,  0,  8, 10],
       [ 1,  1,  6,  8],
       [ 2,  2, 10, 12]])

In [43]: my_array=[]                                                                 
In [45]: for (ex,ey,ew,eh) in r: 
    ...:     wm = int(ex+(ew/2)) 
    ...:     hm = int(ey+(eh/2)) 
    ...:     print(wm,hm) 
    ...:     my_array.append([wm,hm]) 
    ...:                                                                             
4 5
4 5
7 8

结果数组:

In [46]: arr = np.array(my_array)                                                    
In [47]: arr                                                                         
Out[47]: 
array([[4, 5],
       [4, 5],
       [7, 8]])

样本索引:

In [48]: arr[:,0]                                                                    
Out[48]: array([4, 4, 7])   # the 3 wm values
In [49]: arr[-1,:]          # the last values produced by the last `r` row                                                         
Out[49]: array([7, 8])

或更具有符号性的数组:

In [52]: arr = np.array([[f'wm{i}',f'hm{i}'] for i in range(3)])                     
In [53]: arr                                                                         
Out[53]: 
array([['wm0', 'hm0'],
       ['wm1', 'hm1'],
       ['wm2', 'hm2']], dtype='<U3')
In [54]: arr[:,0]                                                                    
Out[54]: array(['wm0', 'wm1', 'wm2'], dtype='<U3')
In [55]: arr[-1,:]                                                                   
Out[55]: array(['wm2', 'hm2'], dtype='<U3')

===

In [108]: arr = np.array([[313.5536, 330.60587], [368.23245, 332.70932]])            
In [109]: arr                                                                        
Out[109]: 
array([[313.5536 , 330.60587],      # 2nd to the last row
       [368.23245, 332.70932]])     # last row

最后一行:

In [110]: arr[-1]                                                                         
Out[110]: array([368.23245, 332.70932])
In [111]: arr[-1,:]                                                                  
Out[111]: array([368.23245, 332.70932])

第一列

In [112]: arr[:,0]                                                                   
Out[112]: array([313.5536 , 368.23245])

第二到最后一行:

In [113]: arr[-2,:]                                                                  
Out[113]: array([313.5536 , 330.60587])