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

无需循环将pandas DataFrame数据填充到numpy矩阵的实现方法

无循环实现方案

方案1:NumPy高级索引(性能最优,推荐)

NumPy原生支持整数数组批量索引,直接取DataFrame的三列值作为索引和赋值源即可完全替代循环,执行效率远高于遍历写法,尤其适合数据量较大的场景,代码如下:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

h,w=25,30 # 矩阵维度

df=pd.DataFrame(
    {
     'row':[1,5,2,4,6,7,15,20],
     'col':[3,15,22,29,16,12,25,1],
     'val':[444,2313,100,21,159,4102,225,2221]
     }
    )

mat = np.zeros((h,w))
# 核心无循环赋值逻辑
mat[df['row'].to_numpy(), df['col'].to_numpy()] = df['val'].to_numpy()

plt.imshow(mat)

注意事项

  • 该方案逻辑和你原有循环完全一致,如果存在重复的(row,col)对,后出现的值会覆盖先出现的值
  • 请确保row列的所有值小于矩阵高度h、col列的所有值小于矩阵宽度w,否则会触发索引越界报错

方案2:Pandas透视表(适合需要补全缺失行列的场景)

如果你的输入数据存在行列索引不连续、需要自动补全全量索引的场景,可以用透视表实现:

# 生成全量行列索引的透视表,空缺位置默认填0
pivot_df = df.pivot(index='row', columns='col', values='val').reindex(
    index=range(h), columns=range(w), fill_value=0
)
mat = pivot_df.values

该方案性能略低于NumPy高级索引方案,更适合小数据集、需要提前做数据规整的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 17:42:01