python - 使用 Python 有效地查找每个像素中的哪些点
问题描述
我有一个代表一组像素的二维网格。对于每个像素,我都有左上角的坐标。
我还有一长串随机分布的二维点。我正在寻找一种有效的方法来查找每个像素中存在的点的索引。
目前我有以下内容:
import numpy as np
xgrid = np.linspace(0,10,11)
ygrid = np.linspace(0,10,11)
X_random_points = np.random.rand(int(1e7))*10
Y_random_points = np.random.rand(int(1e7))*10
for iterationX in range(0,len(xgrid)-1):
for iterationY in range(0,len(ygrid)-1):
valuesInCube = (X_random_points<xgrid[iterationX]) & (X_random_points>xgrid[iterationX-1]) & (Y_random_points<ygrid[iterationY]) &(Y_random_points>ygrid[iterationY-1])
我想知道是否有人知道如何使这个更快?
解决方案
您可以使用np.floor
矢量化整个操作并避免完全循环,只要像素之间的间隔在每个方向上是均匀的。对于您的简单情况, wherexgrid
和ygrid
是整数,您可以这样做
X_random_points = ...
Y_random_points = ...
x_pixels = np.floor(X_random_points)
y_pixels = np.floor(Y_random_points)
如果您的像素不在整数网格上,您必须知道它们之间的分隔。在这种情况下,我建议使用np.arange
而不是np.linspace
生成像素位置:
delta_x, delta_y = 0.5, 0.5
xgrid = np.arange(0, 5.1, delta_x)
ygrid = np.arange(0, 5.1, delta_y)
X_random_points = np.random.rand(int(1e7)) * 5
Y_random_points = np.random.rand(int(1e7)) * 5
x_pixels = np.floor(X_random_points / delta_x)
y_pixels = np.floor(Y_random_points / delta_y)
对于整数情况,您确实在做同样的事情,因为两者都是,delta_x
然后都是。delta_y
1
推荐阅读
- c - 如何将 Gstreamer RTSP 连接到 iPhone?
- python - 如何在 QTableWidget 中有垂直网格线?
- html - 如何在标签块 libxml2 中获取文本?
- ansible - Ansible playbook 输出角色变量和有关您的操作系统的信息
- configuration - 是否可以将 Jackson ObjectMapper 配置为始终使用 @JsonIdentityInfo
- windows - 为什么我的 USB 设备有时会在 windows (7&10) 注册表中创建另一个条目?
- python - 如何连接numpy数组?
- c# - 如何通过 c# 代码以纯文本形式获取 IE 设置?
- nginx - Nginx 代理通行证……什么都没有?
- android - 如何识别与 Genymotion 兼容的 Google Play 应用程序?