Python 使用代码查找numpy数组中两个值之间的差异
我有一个numpy列表,由(my_array=[]启动,形状为(0,))然后我像这样将wm和hm元素附加到它(r是一个级联,格式为-[[300 240 22]]): 该代码生成: 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],您可以自己尝试找出答案)索引不起作用。那么有办法解决这个问题吗?请详细解释一下,因为我还是个新手!提前谢谢 补充: 获取最后两个数据块Python 使用代码查找numpy数组中两个值之间的差异,python,arrays,numpy,opencv,indexing,Python,Arrays,Numpy,Opencv,Indexing,我有一个numpy列表,由(my_array=[]启动,形状为(0,))然后我像这样将wm和hm元素附加到它(r是一个级联,格式为-[[300 240 22]]): 该代码生成: 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
索引数组(在空闲状态)获取(我复制了数组的最后两个块):
[[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 [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])
示例
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 [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])
arr[-1,0]
的续行是最后一行,第一列,即wm
列arr[-2,1]
是倒数第二行,第二列,hm
。你试过代码了吗?arr[-2,1]显示为第二列,推测wm的最后一行和arr[-1,0]是hm的第一列和最后一行,这是令人困惑的。出于这个原因,我需要帮助,甚至给出了代码,这样人们就可以自己尝试并发现这个奇怪的异常。我尝试了[x,y]的每一个索引组合,它要么给出了轴为1的错误,要么给出了不同的索引。这就是为什么我需要有人帮忙。如前所述,上述或之前提出的所有索引方法都不适用于第二行到最后一行的索引。可能是轴为1,因此我无法索引第二行到最后一行。追加元素不会添加新行,它只是更新当前值。所以,我尝试了不同的方法,但都不管用。现在我想看看如何使用不同的追加方法或索引方法来实现这一点。您的数组是二维的,第一列中有wm
值,第二列中有hm
值arr[:0]
获取所有wm
值arr[-1,:]
获取最后一个追加的(wm,hm)
对。arr[-1,0]
的续行是最后一行,第一列,即wm
对arr[-2,1]
是倒数第二行,第二列,hm
。你试过代码了吗?arr[-2,1]显示为第二列,推测wm的最后一行和arr[-1,0]是hm的第一列和最后一行,这是令人困惑的。出于这个原因,我需要帮助,甚至给出了代码,这样人们就可以自己尝试并发现这个奇怪的异常。我尝试了[x,y]的每一个索引组合,它要么给出了轴为1的错误,要么给出了不同的索引。这就是为什么我需要有人帮忙。如前所述,上述或之前提出的所有索引方法都不适用于第二行到最后一行的索引。可能是轴为1,因此我无法索引第二行到最后一行。追加元素不会添加新行,它只是更新当前值。所以,我尝试了不同的方法,但都不管用。现在我想看看如何使用不同的追加方法或索引方法来实现这一点。您的数组是二维的,第一列中有wm
值,第二列中有hm
值arr[:0]
获取所有wm
值arr[-1,:]
获取最后附加的(wm,hm)
对。arr-[[313.5536 330.60587][368.23245 332.70932]]arr[-1]-[368.23245 332.70932]arr[:,0]-[313.5536 368.23245]arr[-1,:]-[368.23245 332.70932]
这些是直接从代码中获取的结果,因此,它可以帮助你更好地了解正在发生的事情。希望这会有所帮助,如果有,我可以向您展示其他索引方法以及它们产生的效果!将您的值复制到我的答案中。将第二行索引到最后一行,也就是这两行案例中的第一行,这对我来说是非常明显的。好吧,如果是这么简单的话,我就不会寻求帮助了。但也许我看错了方向。在程序中,它将数组显示为一条直线s