我有一个由(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。
-例如[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数字建立索引,如果可以分别为它们建立索引会更好?
答案 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])