如何在Pine Script中创建可扩展的3D矩阵?
3D矩阵存储网格数据的可扩展实现方案
核心思路
用三维数组/张量统一存储「时间维度+网格二维维度」的数据,替代多个独立矩阵,从根本上简化调用逻辑,同时天然支持动态扩展。以下是几种主流编程语言的落地实现:
Python 实现(NumPy/深度学习框架)
NumPy 固定+动态扩展方案
import numpy as np # 定义基础参数:时间步总数T、网格高度H、网格宽度W T = 100 H = 50 W = 50 # 初始化固定大小的3D矩阵,可根据数据类型调整dtype grid_time_data = np.zeros((T, H, W), dtype=np.float32) # 存储单步网格数据(假设grid_t是当前时间步的2D网格矩阵) t = 5 grid_t = np.random.rand(H, W) grid_time_data[t] = grid_t # 读取单步数据 loaded_grid = grid_time_data[t] # 动态扩展时间维度:追加新时间步 new_grid = np.random.rand(H, W) grid_time_data = np.vstack([grid_time_data, new_grid[np.newaxis, ...]])
PyTorch/TensorFlow 动态拼接方案
import torch # 用列表临时存储每一步数据,灵活度更高 grid_time_list = [] # 模拟时间步循环生成数据 for t in range(100): grid_t = torch.rand(50, 50) grid_time_list.append(grid_t) # 转换为3D张量(形状:[时间步, 网格高, 网格宽]) grid_time_tensor = torch.stack(grid_time_list) # 扩展时间维度:直接追加后重新拼接 new_grid = torch.rand(50, 50) grid_time_list.append(new_grid) grid_time_tensor = torch.stack(grid_time_list)
C++ 实现(Eigen库)
#include <Eigen/Dense> #include <vector> int main() { int time_steps = 100; int grid_h = 50; int grid_w = 50; // 用vector封装2D矩阵,实现动态3D结构 std::vector<Eigen::MatrixXd> grid_time_data; grid_time_data.reserve(time_steps); // 预分配空间提升效率 // 存储单步数据 Eigen::MatrixXd current_grid(grid_h, grid_w); current_grid.setRandom(); grid_time_data.push_back(current_grid); // 读取单步数据 Eigen::MatrixXd loaded_grid = grid_time_data[5]; // 动态扩展时间维度 Eigen::MatrixXd new_grid(grid_h, grid_w); new_grid.setRandom(); grid_time_data.push_back(new_grid); return 0; }
方案优势
- 统一索引:通过
[时间步, 行, 列]直接定位数据,无需维护多个独立矩阵的命名规则 - 低扩展成本:不管是预分配固定空间还是动态追加,操作逻辑远少于管理多矩阵
- 批量操作友好:可直接对整个3D矩阵做时间维度的运算(比如求时间序列均值、帧间差分)
内容的提问来源于stack exchange,提问作者Slade McBride
相关产品推荐
相关产品推荐

