如何以向量化方式获取(X,Y)坐标的min、max、argmin、argmax及对应坐标
用NumPy向量化实现坐标向量的min/max操作
嘿,我来帮你搞定这个坐标向量的操作需求!既然要求向量化方式实现,那NumPy绝对是最优选择——它专门处理这类数组运算,比手动循环高效太多,代码也更简洁。
先把你的坐标列表转成NumPy数组,这是向量化操作的基础:
import numpy as np # 原始坐标列表 coord = [[3,6], [7,9], [14,9], [11,8], [3,1], [7,14], [19,30]] # 转成NumPy数组(方便向量化运算) coord_array = np.array(coord)
接下来逐个完成你的需求:
1. 获取x坐标最小值对应的(x,y)向量
我们先提取所有x坐标(数组的第0列),找到最小值的索引,再用索引取出对应的整行向量:
# 找到x坐标最小值的第一个出现位置的索引 x_min_idx = np.argmin(coord_array[:, 0]) # 获取对应的(x,y)向量 x_min_vec = coord_array[x_min_idx] print(x_min_vec) # 输出: [3 6]
小贴士:如果有多个x坐标相同的最小值,
np.argmin只会返回第一个出现的索引。如果要获取所有x最小的向量,可以用布尔索引:x_min_val = np.min(coord_array[:, 0]) all_x_min_vecs = coord_array[coord_array[:, 0] == x_min_val] print(all_x_min_vecs) # 输出: [[3 6] [3 1]]
2. 获取x坐标最大值对应的(x,y)向量
和上面逻辑一致,只是把argmin换成argmax:
x_max_idx = np.argmax(coord_array[:, 0]) x_max_vec = coord_array[x_max_idx] print(x_max_vec) # 输出: [19 30]
3. 获取y坐标最小值对应的(x,y)向量
这次提取数组的第1列(y坐标),再找最小值索引:
y_min_idx = np.argmin(coord_array[:, 1]) y_min_vec = coord_array[y_min_idx] print(y_min_vec) # 输出: [3 1]
4. 获取y坐标最大值对应的(x,y)向量
同样用argmax处理y坐标列:
y_max_idx = np.argmax(coord_array[:, 1]) y_max_vec = coord_array[y_max_idx] print(y_max_vec) # 输出: [19 30]
5. 获取x坐标最小值与y坐标最小值的相关结果
这里分两种场景:
场景A:分别获取x最小和y最小的向量
直接用上面得到的x_min_vec和y_min_vec即可,它们分别对应x最小、y最小的向量。
场景B:获取同时满足x最小且y最小的向量
我们可以先拿到x和y的最小值,再用布尔索引筛选同时符合条件的向量:
# 先获取x和y的最小值 x_min_val = np.min(coord_array[:, 0]) y_min_val = np.min(coord_array[:, 1]) # 筛选同时满足两个条件的向量 combined_min_vec = coord_array[(coord_array[:, 0] == x_min_val) & (coord_array[:, 1] == y_min_val)] print(combined_min_vec) # 输出: [[3 1]]
刚好你的坐标列表里存在这样的向量——[3,1]的x是最小值3,y也是最小值1,所以能直接筛选出来。
内容的提问来源于stack exchange,提问作者eric lardon
相关产品推荐
相关产品推荐

