You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选第一列≤20000的数据并生成含对应ID的二维numpy数组

嘿,这需求我熟!咱们用Python来实现的话步骤很清晰,我给你拆解成几个关键步骤,附带代码示例:

实现思路与代码示例

1. 读取文本文件中的数据

首先咱们得把文本里的数据读进来,提取出需要的ID和三维坐标x,y,z(因为要计算点之间的距离)。假设你的数据文件名叫data.txt,第一行是注释行(就是你示例里的# ID M1 M2 ...),代码可以这么写:

import math

# 存储提取后的ID和坐标
data_list = []

with open('data.txt', 'r') as file:
    # 跳过第一行的注释
    next(file)
    for line in file:
        # 分割每行数据,过滤掉多余的空格
        row_data = list(filter(None, line.strip().split()))
        # 提取ID(第一个元素)和x,y,z(最后三个元素)
        point_id = int(row_data[0])
        x = float(row_data[-3])
        y = float(row_data[-2])
        z = float(row_data[-1])
        data_list.append( (point_id, x, y, z) )

2. 计算每个点到最后一个点的距离

接下来咱们用欧几里得距离公式计算所有点到最后一个点的距离,这是3D空间中点距离的常用计算方式:

# 获取最后一个点的坐标
last_point = data_list[-1]
last_x, last_y, last_z = last_point[1], last_point[2], last_point[3]

# 存储每个点的ID和对应的距离
id_distance_pairs = []
for point in data_list:
    pid, x, y, z = point
    # 计算欧几里得距离
    distance = math.sqrt( (x - last_x)**2 + (y - last_y)**2 + (z - last_z)**2 )
    id_distance_pairs.append( (pid, distance) )

如果你需要的是曼哈顿距离或者其他距离类型,直接替换这里的距离公式就行~

3. 筛选符合条件的点并生成二维数组

最后咱们筛选出距离≤20000的条目,生成你需要的两列二维数组(第一列是ID,第二列是对应的距离;要是你想把距离放第一列,调整顺序就行):

# 筛选距离≤20000的条目,生成二维数组
result_array = [ [pair[0], pair[1]] for pair in id_distance_pairs if pair[1] <= 20000 ]

# 打印看看结果
print("符合条件的ID与距离:")
for row in result_array:
    print(row)

大数据量优化:用Numpy加速

如果你的数据量很大,用Numpy来处理会快很多,代码示例如下:

import numpy as np

# 读取数据,跳过第一行注释,只取ID和x,y,z列
data = np.loadtxt('data.txt', skiprows=1, usecols=(0, -3, -2, -1))
point_ids = data[:, 0].astype(int)
coordinates = data[:, 1:]

# 获取最后一个点的坐标
last_coord = coordinates[-1]
# 批量计算所有点到最后一个点的距离
distances = np.sqrt(np.sum((coordinates - last_coord)**2, axis=1))

# 筛选距离≤20000的条目,生成二维数组
mask = distances <= 20000
result_array = np.column_stack( (point_ids[mask], distances[mask]) ).tolist()

print(result_array)

内容的提问来源于stack exchange,提问作者bhjghjh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:19:48