【问题标题】:Finding the difference between two values in a numpy array查找numpy数组中两个值之间的差异
【发布时间】:2019-03-30 19:46:17
【问题描述】:

我有一个 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: invalid index to scalar variable 没有工作。

我要做的就是找到 wm 元素中 2 列的最后一行和倒数第二行之间的差异(因此在上面的示例中,它将是 269.82-270.1=-0.19 和 303.38-303.43=- 0.05)。索引不起作用。那么有没有办法解决这个问题呢?

【问题讨论】:

  • 上一个相同数组的问题:stackoverflow.com/questions/55153448/…
  • 显示r,以及函数的结果(my_array)。我们需要能够重新创建您的阵列。在您之前的问题中,很难理清您对“行”、“列”和索引的使用。
  • @PyDeve1opper 是否有任何解决方案有效?如果是,你应该标记它,让其他用户在遇到同样的问题时知道它。

标签: python arrays numpy indexing array-difference


【解决方案1】:

制作 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)

第二列

In [808]: arr[:,1]                                                              
Out[808]: array([251., 254., 255.], dtype=float32)

查看您之前的问题以获得类似的答案:

Indexing appended elements from a numpy array python

【讨论】:

    【解决方案2】:

    我无法复制您的数组,但鉴于您的(非常复杂的)问题,我相信以下内容最终会满足您的要求:

    这应该给你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]

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2019-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-01-07
      • 2019-01-20
      • 1970-01-01
      • 2016-07-21
      • 2015-10-08
      相关资源
      最近更新 更多