如何用Pandas结合np.dot为12个np.array生成12×12矩阵?
解决方法
1. 用np.dot生成点积矩阵
df.corr()的method参数可以直接传np.dot——因为np.dot对两个一维数组计算的就是你要的点积结果,完全符合method要求的「接收两个一维数组返回浮点数」的规则。只要把原来的corr = df.corr()改成:
corr = df.corr(method=np.dot)
生成的矩阵里,每个元素就是对应两列数组的点积,比如d_normal和d_redraw的交点就是你测试的11.68。
2. 强制显示完整12×12矩阵
Pandas默认会截断过多的列/行,只要设置几个显示选项就能让矩阵完整展示:
在代码开头加上这几行:
# 显示所有列、行,避免截断 pd.set_option('display.max_columns', None) pd.set_option('display.max_rows', None) # 加宽显示宽度,防止内容换行挤在一起 pd.set_option('display.width', 1000)
修改后的完整代码
import numpy as np import pandas as pd # 设置Pandas显示选项,强制完整显示矩阵 pd.set_option('display.max_columns', None) pd.set_option('display.max_rows', None) pd.set_option('display.width', 1000) d_normal = ['1.00', '1.00', '0.90', '0.60', '0.00', '1.00', '0.00', '0.10', '0.40', '0.70', '1.00', '0.00', '0.00', '0.00', '1.00', '1.00', '0.00', '0.10', '0.40', '0.70', '1.00', '1.00', '0.90', '0.60', '0.00'] d_redraw = ['1.00', '1.00', '0.90', '0.60', '0.00', '1.00', '1.00', '0.20', '0.40', '0.70', '1.00', '1.00', '0.10', '0.00', '1.00', '1.00', '1.00', '0.20', '0.40', '0.70', '1.00', '1.00', '0.90', '0.60', '0.00'] d_noise = ['0.80', '0.80', '0.70', '0.40', '0.00', '0.80', '0.80', '0.00', '0.20', '0.50', '0.80', '0.80', '0.00', '0.00', '0.80', '0.80', '0.80', '0.00', '0.20', '0.50', '0.80', '0.80', '0.70', '0.40', '0.00'] d_noise_blur = ['0.96', '0.96', '0.84', '0.48', '0.00', '0.96', '0.96', '0.00', '0.24', '0.60', '0.96', '0.96', '0.00', '0.00', '0.96', '0.96', '0.96', '0.00', '0.24', '0.60', '0.96', '0.96', '0.84', '0.48', '0.00'] n_normal = ['1.00', '0.00', '0.00', '0.00', '1.00', '1.00', '1.00', '0.00', '0.00', '1.00', '1.00', '0.00', '1.00', '0.00', '1.00', '1.00', '0.00', '0.00', '1.00', '1.00', '1.00', '0.00', '0.00', '0.00', '1.00'] n_redraw = ['1.00', '0.70', '0.00', '0.00', '1.00', '1.00', '1.00', '0.70', '0.00', '1.00', '1.00', '0.70', '1.00', '0.70', '1.00', '1.00', '0.00', '0.70', '1.00', '1.00', '1.00', '0.00', '0.00', '0.70', '1.00'] n_noise = ['0.80', '0.50', '0.00', '0.00', '0.80', '0.80', '0.80', '0.50', '0.00', '0.80', '0.80', '0.50', '0.80', '0.50', '0.80', '0.80', '0.00', '0.50', '0.80', '0.80', '0.80', '0.00', '0.00', '0.50', '0.80'] n_noise_blur = ['0.96', '0.60', '0.00', '0.00', '0.96', '0.96', '0.96', '0.60', '0.00', '0.96', '0.96', '0.60', '0.96', '0.60', '0.96', '0.96', '0.00', '0.60', '0.96', '0.96', '0.96', '0.00', '0.00', '0.60', '0.96'] w_normal = ['1.00', '0.00', '1.00', '0.00', '1.00', '1.00', '0.00', '1.00', '0.00', '1.00', '0.80', '0.20', '0.80', '0.20', '0.80', '0.60', '0.40', '0.60', '0.40', '0.60', '0.00', '1.00', '0.00', '1.00', '0.00'] w_redraw = ['1.00', '0.40', '1.00', '0.40', '1.00', '1.00', '0.40', '1.00', '0.40', '1.00', '0.80', '0.40', '1.00', '0.40', '0.80', '0.60', '0.60', '0.80', '0.60', '0.60', '0.00', '1.00', '0.00', '1.00', '0.00'] w_noise = ['0.80', '0.20', '0.80', '0.20', '0.80', '0.80', '0.20', '0.80', '0.20', '0.80', '0.60', '0.20', '0.80', '0.20', '0.60', '0.40', '0.40', '0.60', '0.40', '0.40', '0.00', '0.80', '0.00', '0.80', '0.00'] w_noise_blur = ['0.96', '0.24', '0.96', '0.24', '0.96', '0.96', '0.24', '0.96', '0.24', '0.96', '0.72', '0.24', '0.96', '0.24', '0.72', '0.48', '0.48', '0.72', '0.48', '0.48', '0.00', '0.96', '0.00', '0.96', '0.00'] # 转换为numpy数组并整理到字典 arrays = { 'd_normal': np.array(d_normal, dtype=float), 'd_redraw': np.array(d_redraw, dtype=float), 'd_noise': np.array(d_noise, dtype=float), 'd_noise_blur': np.array(d_noise_blur, dtype=float), 'n_normal': np.array(n_normal, dtype=float), 'n_redraw': np.array(n_redraw, dtype=float), 'n_noise': np.array(n_noise, dtype=float), 'n_noise_blur': np.array(n_noise_blur, dtype=float), 'w_normal': np.array(w_normal, dtype=float), 'w_redraw': np.array(w_redraw, dtype=float), 'w_noise': np.array(w_noise, dtype=float), 'w_noise_blur': np.array(w_noise_blur, dtype=float) } def correlation_matrix(): # 测试点积结果 print(np.dot(arrays['d_normal'], arrays['d_redraw'])) df = pd.DataFrame(arrays) # 使用np.dot计算点积矩阵 corr = df.corr(method=np.dot) print(corr) correlation_matrix()
小优化:简化数组管理
把所有数组放到字典里统一转换和管理,比逐个定义变量更简洁,后续要加/改数组也更方便。
内容的提问来源于stack exchange,提问作者AndrewRed
相关产品推荐
相关产品推荐

