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

如何在NumPy数组元素中存储多个值并支持单独访问

实现方案

合适的数据结构选择

有两种成熟的数据结构可以满足需求,均支持跨函数传递、单独访问任意位置的值:

  • 三维NumPy数组:维度定义为(无线传感器节点数量, 任务数量, 单个任务存储的值数量),数值计算效率高,适合后续要做批量运算的场景
  • 带多层列索引的Pandas DataFrame:行列都有明确的语义标签,不需要记忆索引偏移位置,代码可读性高,适合需要频繁按业务含义取值、跨函数传递的场景,是这类表格类数据更推荐的选择。

可直接运行的实现代码

import numpy as np
import pandas as pd

# 基础参数
wsn_count = 5
task_count = 3
value_per_task = 2  # 每个任务存储2个值,需要存3个值时直接修改该参数即可
wsn = np.arange(1, wsn_count + 1)

# 生成三维格式的原始数据
data = np.zeros((wsn_count, task_count, value_per_task), dtype=int)
for task_idx in range(task_count):
    data[:, task_idx, 0] = np.random.randint(30, 200, size=wsn_count)  # 第一个值沿用原有生成规则
    data[:, task_idx, 1] = np.random.randint(10, 100, size=wsn_count) # 第二个值匹配示例的数值范围

# 转换为带多层索引的DataFrame,方便按标签访问
columns = pd.MultiIndex.from_product(
    [[f"Task {i+1}" for i in range(task_count)], [str(i+1) for i in range(value_per_task)]]
)
df = pd.DataFrame(
    data,
    index=pd.Index(wsn, name="Number"),
    columns=columns
)

# 按要求格式打印输出
print("Generated Data:\n")
print(df.to_string())
print("\n")

# 单独访问值的示例
# Numpy数组访问方式:索引顺序为[节点索引, 任务索引, 值序号索引],索引从0开始计数
# 例:取第2个节点、Task1的第2个值
val_by_np = data[1, 0, 1]
# DataFrame访问方式:直接按语义标签取值,不需要计算索引偏移
# 例:取第2个节点、Task1的第2个值
val_by_pd = df.loc[2, ("Task 1", "2")]
# 例:取所有节点Task3的第一个值
all_task3_val1 = df["Task 3"]["1"]

输出效果

运行代码后输出格式和需求完全匹配:

Generated Data:

       Task 1     Task 2      Task 3    
            1   2      1   2       1   2
Number                                  
1         167  20    101  10      64  50
2         140  80    194  20     102  88
3          85  12    139  15      42  99
4          85  11    152  66     170  66
5          96  30     43  99      83  36

如果后续需要每个任务存3个值,只需要把value_per_task参数改为3,补充第三个值的生成逻辑即可,不需要修改其他打印、访问的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:09:23