python - 使用代码在numpy数组中查找两个值之间的差

标签 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元素中两列的最后一行与倒数第二行之间的差异(因此,在上面的示例中,该行的值为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数字建立索引,如果可以分别为它们建立索引会更好?

最佳答案

一个示例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])

关于python - 使用代码在numpy数组中查找两个值之间的差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55671921/

相关文章:

Python - binascii.unhexlify 和 .decode ("hex") 返回 TypeError : Non-hexadecimal digit found

python - 如何使用 cythonize 启用 `--embed`?

javascript - 解码 Javascript For 循环

java - 多个 JButton 的一个事件处理程序

python - 使用相同的键将两本词典合二为一?

python每日数据来自每分钟的数据

python - NumPy 中与 NaN 相关的矩阵

python - matplotlib:未正确绘制曲线

javascript - 使用for循环使用整数序列填充数组,而不会导致Chrome崩溃

python - 在 Python 或 SQL 中像求解器一样使用 Excel