我有一个起始形状为(0,)-(arr = [])的数组,我将值附加到(wm,hm),因此它们会不断更新。我可以索引附加值的最后一行,但是不能索引附加值的倒数第二行。
尝试了所有可能的索引方法,例如(在这些方法中切换数字):[-1] [0],arr [-1、0],arr [-2,1],arr [-2, :],arr [-2 :: 2]等。其他时候,当我尝试索引倒数第二行时,它向我显示了轴错误,这可能是问题所在(附加操作不会添加新行,这就是我试图索引,而是覆盖旧值)。我不知道。因此,我尝试使用以下方法切换附加方法:串联,vstack,pandas。但这没有帮助。用尽所有索引组合和我已知的所有附加方法,我正在寻求帮助。
r= is an array formatted like so [[300 240 22 22]]
arr=[] #shape is (0,)
for (x, y, w, h) in r:
wm=int(x+ (w/2.))
hm=int(y+ (h/2.))
arr.append([numpy.float32(wm), numpy.float32(hm)])
return numpy.array(arr)
索引数组(在空闲状态)会提取(我复制了数组的最后两个块):
[[293.51373 323.4329 ]
[247.77493 316.02783]]
[[292.9887 322.23425]
[247.24142 314.2921 ]]
返回的数组的形状为(2,2)且为dtype:float32 为了澄清将来的混淆,这只是一个快照,这两行是倒数第二行,但很快就会被附加到数组中的新值行覆盖。因此它不是静态数组,因此在尝试索引倒数第二行时它不起作用。每种索引方法要么获取最后附加的行,要么获取错误(轴错误)。想象这样的两行:
[[293.51373 323.4329 ][247.77493 316.02783]] # second last row
我想索引[293。 323.]从第二行到最后一行(附加循环的上一次迭代的最后一行,现在是倒数第二个)
[[292.9887 322.23425][247.24142 314.2921 ]] # last row-
这些是以前的索引方法无效的一些结果。
arr [[255.44836 280.92575] # i want to index this line-second to last row
[298.6107 285.75986]]
arr[-1] [298.6107 285.75986]
arr[-2] [255.44836 280.92575]
arr[-2][0] 255.44836
arr[:,0] [255.44836 298.6107 ]
arr[-1,:] [298.6107 285.75986]
arr[-2,0] 255.44836
arr [[255.35194 281.08353] # along with this line- last row
[298.45673 285.88693]]
arr[-1] [298.45673 285.88693]
arr[-2] [255.35194 281.08353]
arr[-2][0] 255.35194
arr[:,0] [255.35194 298.45673]
arr[-1,:] [298.45673 285.88693]
arr[-2,0] 255.35194
以上所有索引方法都为最后一行或最后一行的某些部分建立索引。 如果您有任何新的索引或附加行的方法,请告诉我!我可以消除任何混乱,这很难解释。感谢您的宝贵时间。
答案 0 :(得分:0)
让我们排3行r
:
In [3]: r = np.array([[300, 240, 22, 22],[301, 241, 22, 22] ,[302, 242, 22, 22]])
In [4]: r
Out[4]:
array([[300, 240, 22, 22],
[301, 241, 22, 22],
[302, 242, 22, 22]])
In [5]: arr = []
In [6]: for (x, y, w, h) in r:
...: wm=int(x+ (w/2.))
...: hm=int(y+ (h/2.))
...: arr.append([numpy.float32(wm), numpy.float32(hm)])
...:
In [7]: arr
Out[7]: [[311.0, 251.0], [312.0, 252.0], [313.0, 253.0]]
In [8]: arr = np.array(arr)
In [9]: arr
Out[9]:
array([[311., 251.],
[312., 252.],
[313., 253.]], dtype=float32)
arr
中r
的每一行都有一行。
选择arr
的最后一行:
In [11]: arr[-1,:]
Out[11]: array([313., 253.], dtype=float32)
秒到最后一行:
In [12]: arr[-2,:]
Out[12]: array([312., 252.], dtype=float32)
最后两行:
In [13]: arr[-2:,:]
Out[13]:
array([[312., 252.],
[313., 253.]], dtype=float32)
告诉我,我的例子有什么问题?为什么它与您对数组及其行的概念不匹配。
鉴于示例r
,我看不到如何获得像这样的数组
[[293.51373 323.4329 ]
[247.77493 316.02783]]
您需要给我们[mcve]-我们可以复制粘贴并运行的示例代码和数据,并获得与您相同的结果。否则,我们会一次又一次地互相交谈。