我想索引一个numpy数组的倒数第二行 我有一个循环,不断添加新行:
arr2= is an array formatted like so [[300 240 22 22]]
因此在上面的示例中x = 300 y = 240 w = 22 h = 22
这些数字将在等式中进行处理,直到wm有2个数字,因此[200,300]和hm也有2个数字[200,300],并且都将不间断地附加到arr的末尾(不创建新数组而是添加到单个数组。所以看起来就像这样不断添加新行(我不知道它实际上是在添加新行还是覆盖旧值):
----row [[301.77325 225.71806][366.08594 232.20958]]
----row [[301.54193 225.93848][365.76663 232.37358]]
---- [[300.9011 225.27153][365.21063 231.52242]]second to last appended
row
---- [[300.63205 223.20387][364.91928 229.46263]]last appended row
then there would be another row being appended this is just a snapshot
代码:
arr=[] #shape is (0,)
for (x, y, w, h) in arr2:
wm=int(x + (w/2))
hm=int(y + (h/2))
arr.append([wm, hm])
simplified version:
arr=[]
for (x, w) in arr2:
wm=int(x + (w/2))
arr.append([wm])
未经简化的代码将生成一个形状为(2,2)且类型为dtype:float32的数组。
column (wm) column(hm)
| |
| |
[[293.51373 323.4329 ] # second to last row
[247.77493 316.02783]]
[[292.9887 322.23425]
[247.24142 314.2921 ]]
这些是我尝试过的索引方法的一些示例(以及数组)(这些是数组的最后两个附加行):
arr [[255.44836 280.92575] # I want to index this line-second to last appended 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[-2::2] [255.44836 280.92575]
arr [[255.35194 281.08353] # along with this line-last appended 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
arr[-2::2] [255.35194 281.08353]
其他时候,当我尝试索引倒数第二行时,它向我显示了轴错误,这可能是问题所在(附加操作未添加新行,这是我要索引的内容,而是覆盖了旧行值)。我不知道。因此,我尝试使用以下方法切换附加方法:串联,vstack,pandas。但这没有帮助。 我要做的就是找到wm元素中第二列的最后一行和倒数第二行之间的区别(在示例280.92575-281.08353中),并且与wm元素的第一列相同(255.44836-255.35194) )。所有各种索引方法都没有获取倒数第二行,而仅获取了最后一行。请让我知道是否有其他方法可以以不同的方式对倒数第二行进行索引,或者是否还有其他我尚未尝试过的索引方法。很抱歉,如果仍然感到困惑,还是很困惑。我可以尝试消除任何混乱。预先感谢!
答案 0 :(得分:0)
如果要索引列表的最后一项,请使用
arr[-1]
如果您想索引倒数第二项,请使用
arr[-2]
但是,请确保阵列足够长。如果您的数组只有1个项目,而您想索引倒数第二个项目,则会导致错误。
答案 1 :(得分:0)
如果我正确理解了您的描述,那么以下方法应该起作用:
In [49]: arr
Out[49]:
array([[255.44836, 280.92575],
[298.6107 , 285.75986],
[255.35194, 281.08353],
[298.45673, 285.88693]])
In [50]: arr[0] - arr[-2]
Out[50]: array([ 0.09642, -0.15778])
# accessing elements in a `forward manner`
In [51]: arr[0] - arr[2]
Out[51]: array([ 0.09642, -0.15778])
# accessing elements in a `reverse manner` using negative indices
In [52]: arr[-4] - arr[-2]
Out[52]: array([ 0.09642, -0.15778])
# or mix both
In [50]: arr[0] - arr[-2]
Out[50]: array([ 0.09642, -0.15778])
您可以使用正向索引或反向索引或混合索引,以方便为准。