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

Python中如何根据索引与对应值生成指定结构的矩阵

实现思路

可以生成目标矩阵,你用pd.crosstab无法得到预期结果的核心原因是方法选错了:pd.crosstab的作用是统计两个分类变量的交叉频数,本身不支持做布尔值的外积逻辑运算。

你要的矩阵本质是布尔逻辑与外积矩阵:矩阵中坐标为(i,j)的单元格取值,等于原数据中索引i对应的Value值和索引j对应的Value值做逻辑与运算的结果——只要两个值有一个为False,对应单元格就是False,两个都为True时单元格才是True,和你给出的目标结构完全匹配。

具体实现代码

首先构造你的原始测试数据:

import pandas as pd
import numpy as np

# 原始数据集
raw_df = pd.DataFrame({
    'Value': [True, True, False, True]
}, index=[0,1,2,3])

方法1:numpy广播运算(性能最优,推荐)

直接利用numpy的广播机制,把一维布尔数组分别转为列向量、行向量做逻辑与运算,一步得到n*n矩阵:

val_arr = raw_df['Value'].to_numpy()
# 列向量(n,1) 与 行向量(1,n) 做按位与,广播后直接得到n*n结果矩阵
res_matrix = val_arr[:, np.newaxis] & val_arr[np.newaxis, :]
# 转为DataFrame,行列索引复用原数据的index
res_df = pd.DataFrame(res_matrix, index=raw_df.index, columns=raw_df.index)

运行后打印res_df得到的输出完全匹配你的目标结构:

0      1      2      3
0   True   True  False   True
1   True   True  False   True
2  False  False  False  False
3   True   True  False   True

方法2:pandas矩阵乘法实现

利用True=1、False=0的数值对应规则,做整数矩阵乘法后再转回布尔类型,结果和方法1完全一致:

res_df2 = pd.DataFrame(
    raw_df[['Value']].astype(int).dot(raw_df[['Value']].T.astype(int)).astype(bool),
    index=raw_df.index,
    columns=raw_df.index
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:09:25