numpy - 有效地将坐标设置为 numpy(位图)数组,不包括屏幕外坐标
问题描述
这个问题来自有效地将 {coordinate+value} 的集合绘制到(numpy 数组)位图
给出了从 x、y、颜色列表绘制位图的解决方案:
bitmap = np.zeros((10, 10, 3))
s_x = (0,1,2) ## tuple
s_y = (1,2,3) ## tuple
pixal_val = np.array([[0,0,1],[1,0,0],[0,1,0]]) ## np
bitmap[s_x, s_y] = pixal_val
plt.imshow(bitmap)
但是如何处理一些 (x,y) 对位于位图之外的情况呢?
效率是最重要的。
如果我可以将屏幕外坐标映射到位图的第一行/列(-42, 7) -> (0, 7)
,(15, -6) -> (15, 0)
我可以简单地将第一行和列涂黑bitmap[:,0,:] = 0; bitmap[0,:,:] = 0
。
这是可行的吗?
有没有更聪明的方法?
解决方案
你期待屏幕外坐标吗?如果是这样,请不要担心,否则我只是想知道它是否使用了非传统坐标系-无论出于何种原因,零都可能位于图像的中心
无论如何,在我发现您可以使用 numpy 数组来存储坐标之后,将异常值映射到第一行/列非常简单,只需使用:s_x[s_x < 0] = 0
,但是,我相信使用逻辑查找像素索引的最有效方法你想使用所以只有他们被分配 - 见下文:
bitmap = np.zeros((15, 16, 3))
## generate data
s_x = np.array([a for a in range(-3,22)], dtype=int)
s_y = np.array([a for a in range(-4,21)], dtype=int)
np.random.shuffle(s_x)
np.random.shuffle(s_y)
print(s_x)
print(s_y)
pixel_val = np.random.rand(25,3)
## generate is done
use = np.logical_and(np.logical_and(s_x >= 0, s_x < bitmap.shape[1]), np.logical_and(s_y >= 0, s_y < bitmap.shape[0]))
bitmap[s_y[use], s_x[use]] = pixel_val[use]
plt.imshow(bitmap)
输出:
坐标:
[ 8 3 21 9 -2 -3 5 14 -1 18 13 16 0 11 7 1 2 12 15 6 19 10 4 17 20]
[ 8 14 1 9 2 4 7 15 3 -3 19 16 6 -1 0 17 5 13 -2 20 -4 11 10 12 18]
图片:
我运行了一个测试,它必须分配 3145728(您在另一个问题中给出的位图大小的四倍),其中大约一半在图像之外,平均需要大约 140 毫秒,而重新映射异常值,然后设置同一任务的第一行/列归零需要 200 毫秒
推荐阅读
- python-3.x - 有没有办法减少 if 语句?Python
- ansible - 使用 Ansible 中大括号括起来的键访问项目的 dict 值
- python - 如何使用具有 vlookup 功能的多索引列向数据框添加列?
- c# - 如何使用 ASP.NET Core Identity 在登录时将 cookie 发送到浏览器?
- r - 如何将提供给用户定义函数的参数用作输入和字符串?
- javascript - 在 Heroku 上部署 React 应用程序时出错,日志中没有错误
- php - 如何在自定义 woocommerce 循环中管理分页
- python - Seaborn regplot 拟合线与 stats.linregress 或 stats 模型的计算拟合不匹配
- python-3.x - python中的月到日期为通用方式
- yarnpkg - Yarn 工作空间检测到包,但纱线工作空间没有