python - 如何索引已附加到 1d numpy 数组 python 的元素
问题描述
我有一个问题,我一直在努力解决。我有一个 numpy 数组,我在末尾附加值(如下所示):
array = []
for (x, y, w, h) in e:
wm = int(x + float(w / 2))
hm = int(y + float(h / 2))
array.append([numpy.float32(wm),numpy.float32(wh)])
return numpy.array(array)
#and it gives
[200.90489, 100.39489] #the second last
[288.0594, 30.0950] #last
#and so on..
我想索引array[0][-2] - array[0][-1]
,以便我可以找到第一列中倒数第二个附加元素 (the 200.90489
) 和第一列中最后一个附加元素(the ) 之间的差异288.0594
。我可以索引列,但我不能索引行,因为它是一维数组,我尝试了多种方法将其转换为二维,但它不起作用。我试过了numpy.resize
,numpy.reshape
但两者都没有帮助。
我该怎么办?提前致谢!
解决方案
几点评论:
array
是 numpy 的一个关键,你可能不应该将它用作变量名。它会起作用,但这不是最佳实践。return
用于函数末尾的返回值,不能将其放入for
循环中(另外,即使在函数中,循环也会在第一次中断return
)看起来您的结果将是一个二维数组,
array[i][j]
应该可以工作。但我认为你交换了i
和j
.不知道为什么要转换为 numpy.array,它已经适用于列表。
很多明显不必要的类型转换:
float
=>int
=>numpy.float32
。我会在下面假设你想要一个四舍五入的整数。
所以,如果我猜对了你想做什么,这应该有效:
my_array = []
for (x, y, w, h) in e:
wm = int(x + w/2.)
hm = int(y + h/2.)
my_array.append([wm, wh])
if len(my_array) >= 2:
last_wm_diff = my_array[-1][0]-my_array[-2][0]
last_hm_diff = my_array[-1][1]-my_array[-2][1]
# It will work the same if you convert to a numpy array:
my_array = numpy.array(my_array)
if my_array.shape[0] >= 2:
last_wm_diff = my_array[-1][0]-my_array[-2][0]
last_hm_diff = my_array[-1][1]-my_array[-2][1]
推荐阅读
- vba - Outlook:根据签名发送计数
- java - 如何正确创建实体/对象?
- java - 实现观察者模式 Android
- swift - 如何使 PDFView 从文档顶部开始?
- django - 尝试使用 VS Code 在虚拟环境中安装 Django 时出错,但出现错误
- html - 如何在 nuxtjs 中显示来自存储(Laravel)的图像
- sql - 每月有条件地计算延迟付款,包括重置为零
- layout - Cairo DrawingArea/Context 中的布局管理?
- shell - -p 在 shell 命令中
- xml - Odoo 13:从 xml 数据创建记录时如何将 one2many 字段设置为空?