pytorch张量中的过滤行
如果我有张量,它以以下形状保存检测图像的信息:pytorch张量中的过滤行,pytorch,Pytorch,如果我有张量,它以以下形状保存检测图像的信息: [[595.00000, 179.62500, 628.00000, 283.00000, 0.89062, 0.00000], [142.87500, 167.62500, 201.62500, 324.00000, 0.88086, 0.00000], [311.75000, 170.50000, 368.75000, 320.50000, 0.87549, 0.00000
[[595.00000, 179.62500, 628.00000, 283.00000, 0.89062, 0.00000],
[142.87500, 167.62500, 201.62500, 324.00000, 0.88086, 0.00000],
[311.75000, 170.50000, 368.75000, 320.50000, 0.87549, 0.00000],
[555.50000, 173.75000, 593.50000, 280.50000, 0.85791, 0.00000],
[398.50000, 179.00000, 425.50000, 265.00000, 0.84180, 0.00000],
[445.75000, 177.75000, 479.25000, 270.75000, 0.82129, 0.00000]]
其中,每行表示具有以下参数的图像:
[ top, bottom, left, right, confidence, class ]
对于尺寸小于某些用户定义的高度输入(即上下
)的图像(行),最有效的放置方法是什么
当然,我会对行进行迭代,然后在上下
的位置删除每一行,并对列表进行一些理解,但我怀疑有更好的方法来做到这一点。解决方案是:
import torch
a = torch.Tensor(
[[595.00000, 179.62500, 628.00000, 283.00000, 0.89062, 0.00000],
[142.87500, 167.62500, 201.62500, 324.00000, 0.88086, 0.00000],
[311.75000, 170.50000, 368.75000, 320.50000, 0.87549, 0.00000],
[555.50000, 173.75000, 593.50000, 280.50000, 0.85791, 0.00000],
[398.50000, 179.00000, 425.50000, 265.00000, 0.84180, 0.00000],
[445.75000, 177.75000, 479.25000, 270.75000, 0.82129, 0.00000]])
y = a[a[:, 0] - a[:, 1] > 300]
print(y)
> tensor([[595.0000, 179.6250, 628.0000, 283.0000, 0.8906, 0.0000],
> [555.5000, 173.7500, 593.5000, 280.5000, 0.8579, 0.0000]])
例如,如果您只需要保留高度>300px的图像,我可以删除一些基准点吗(如果您感兴趣的话) 基准 PYIC方式:
In[2]: import torch
...: a = torch.Tensor(
...: [[595.00000, 179.62500, 628.00000, 283.00000, 0.89062, 0.00000],
...: [142.87500, 167.62500, 201.62500, 324.00000, 0.88086, 0.00000],
...: [311.75000, 170.50000, 368.75000, 320.50000, 0.87549, 0.00000],
...: [555.50000, 173.75000, 593.50000, 280.50000, 0.85791, 0.00000],
...: [398.50000, 179.00000, 425.50000, 265.00000, 0.84180, 0.00000],
...: [445.75000, 177.75000, 479.25000, 270.75000, 0.82129, 0.00000]])
In[3]: %timeit a[a[:, 0] - a[:, 1] > 300]
Out[3]: 24.5 µs ± 904 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
用Numpy的话来说:
In[4]: import numpy as np
In[5]: %timeit np_arr[np.where(np_arr[:, 0] - np_arr[:, 1] > 300)]
Out[5]: 4.75 µs ± 713 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In[6]: np_arr[np.where(np_arr[:, 0] - np_arr[:, 1] > 300)]
衡平法
In[7]: torch.equal(torch.from_numpy(np_arr[np.where(np_arr[:, 0] - np_arr[:, 1] > 300)]), a[a[:, 0] - a[:, 1] > 300])
Out[7]: True
结论是使用numpy进行比较要比PyTorch快得多