查找numpy数组中两个值之间的差异
Finding the difference between two values in a numpy array
我有一个 numpy 列表,它由 (my_array=[] 启动,形状为 (0,)) 然后我将 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 element the hm element
[[270.01 303.43] [310.17 306.37]] # second to last row
[[269.82 303.38] [310.99 306.86]] # the last row
the shape of the returned array is (2,2) and is 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)。索引不起作用。那么有没有办法解决这个问题?
我无法重现你的数组,但考虑到你的(非常复杂的)问题,我相信下面的内容最终会完成你的要求:
这应该给你 269.82-270.1=-0.19
my_array[0][-2]-my_array[0][0]
这应该会给你 303.38-303.43=-0.05
my_array[0][-1]-my_array[0][1]
总的来说,我认为您索引数组 my_array
如下:
wm element the hm element
[[my_array[0][0] my_array[0][1]] [my_array[1][0] my_array[1][1]]] # second to last row
[[my_array[0][-2] my_array[0][-1]] [my_array[1][-2] my_array[1][-1]]] # the last row
在您的特定情况下,倒数第二个元素也是第三个元素,因此您可以将它们索引为 my_array[0][2]
而不是 my_array[0][-2]
和 my_array[1][2]
而不是 my_array[1][-2]
制作 3 个 'r' 值:
In [798]: r=np.array([[300, 240, 22, 22]])+np.array([[0],[2],[3]])
In [799]: r
Out[799]:
array([[300, 240, 22, 22],
[302, 242, 24, 24],
[303, 243, 25, 25]])
你的循环产生:
In [800]: 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)])
...:
In [801]: my_array
Out[801]: [[311.0, 251.0], [314.0, 254.0], [315.0, 255.0]]
作为数组:
In [802]: arr = np.array(my_array)
In [803]: arr
Out[803]:
array([[311., 251.],
[314., 254.],
[315., 255.]], dtype=float32)
倒数第二行
In [804]: arr[-2,:]
Out[804]: array([314., 254.], dtype=float32)
最后一行:
In [805]: arr[-1,:]
Out[805]: array([315., 255.], dtype=float32)
他们的区别:
In [806]: arr[-2,:]-arr[-1,:]
Out[806]: array([-1., -1.], dtype=float32)
第一列:
In [807]: arr[:,0]
Out[807]: array([311., 314., 315.], dtype=float32)
第 2 栏
In [808]: arr[:,1]
Out[808]: array([251., 254., 255.], dtype=float32)
查看您之前的问题以获得类似的答案:
Indexing appended elements from a numpy array python
我有一个 numpy 列表,它由 (my_array=[] 启动,形状为 (0,)) 然后我将 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 element the hm element
[[270.01 303.43] [310.17 306.37]] # second to last row
[[269.82 303.38] [310.99 306.86]] # the last row
the shape of the returned array is (2,2) and is 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)。索引不起作用。那么有没有办法解决这个问题?
我无法重现你的数组,但考虑到你的(非常复杂的)问题,我相信下面的内容最终会完成你的要求:
这应该给你 269.82-270.1=-0.19
my_array[0][-2]-my_array[0][0]
这应该会给你 303.38-303.43=-0.05
my_array[0][-1]-my_array[0][1]
总的来说,我认为您索引数组 my_array
如下:
wm element the hm element
[[my_array[0][0] my_array[0][1]] [my_array[1][0] my_array[1][1]]] # second to last row
[[my_array[0][-2] my_array[0][-1]] [my_array[1][-2] my_array[1][-1]]] # the last row
在您的特定情况下,倒数第二个元素也是第三个元素,因此您可以将它们索引为 my_array[0][2]
而不是 my_array[0][-2]
和 my_array[1][2]
而不是 my_array[1][-2]
制作 3 个 'r' 值:
In [798]: r=np.array([[300, 240, 22, 22]])+np.array([[0],[2],[3]])
In [799]: r
Out[799]:
array([[300, 240, 22, 22],
[302, 242, 24, 24],
[303, 243, 25, 25]])
你的循环产生:
In [800]: 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)])
...:
In [801]: my_array
Out[801]: [[311.0, 251.0], [314.0, 254.0], [315.0, 255.0]]
作为数组:
In [802]: arr = np.array(my_array)
In [803]: arr
Out[803]:
array([[311., 251.],
[314., 254.],
[315., 255.]], dtype=float32)
倒数第二行
In [804]: arr[-2,:]
Out[804]: array([314., 254.], dtype=float32)
最后一行:
In [805]: arr[-1,:]
Out[805]: array([315., 255.], dtype=float32)
他们的区别:
In [806]: arr[-2,:]-arr[-1,:]
Out[806]: array([-1., -1.], dtype=float32)
第一列:
In [807]: arr[:,0]
Out[807]: array([311., 314., 315.], dtype=float32)
第 2 栏
In [808]: arr[:,1]
Out[808]: array([251., 254., 255.], dtype=float32)
查看您之前的问题以获得类似的答案:
Indexing appended elements from a numpy array python