C#中如何实现Matrix动态添加新行或新列
动态可变维度矩阵实现方案
以下提供两种常用数据分析语言的落地方案,均不需要提前确定矩阵行列数,不存在的属性/行可自动创建:
Python 实现
推荐优先用pandas DataFrame实现,后续做矩阵运算、数据导出都更方便:
- 第一步:初始化空矩阵
直接创建空DataFrame即可:import pandas as pd # 初始化空矩阵,无行无列 dynamic_matrix = pd.DataFrame() - 第二步:读取txt属性直接赋值
逐行解析txt得到的属性名、属性值、所属行索引,直接赋值即可,不存在的行/属性列会自动创建,未赋值的位置默认填充NaN:# 示例:给行索引为sample_01的样本添加属性age,值为25 dynamic_matrix.loc["sample_01", "age"] = 25 # 示例:给行索引为sample_02的样本添加属性height,值为178 dynamic_matrix.loc["sample_02", "height"] = 178 - 如果你需要转成标准numpy矩阵,调用
dynamic_matrix.to_numpy()即可。
如果不想依赖第三方库,可以用嵌套字典实现轻量版本:
from collections import defaultdict # 定义双层defaultdict,未赋值的位置默认返回0,可自定义为None等其他值 dynamic_matrix = defaultdict(lambda: defaultdict(int)) # 直接赋值即可,行/列不存在自动创建 dynamic_matrix[0]["age"] = 25
R 实现
推荐用tibble实现,扩容兼容性比原生data.frame更好:
- 初始化空矩阵:
library(tibble) dynamic_matrix <- tibble() - 赋值自动扩容:
新增属性列直接赋值,长度不足自动补NA;新增行用rbind()即可,缺失属性自动补NA:# 新增属性列age dynamic_matrix[["age"]] <- c(25, 30) # 新增行 dynamic_matrix <- rbind(dynamic_matrix, list(age = 22, height = 175))
注意:如果你的属性稀疏度很高(大部分位置为空值),建议用稀疏矩阵结构存储,Python可使用scipy.sparse类,R可使用Matrix包的稀疏矩阵类,能大幅降低内存占用。
内容的提问来源于stack exchange,提问作者user15519784
相关产品推荐
相关产品推荐

