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

Python中scipy.stats的somersd函数触发TypeError问题排查

解决Somers' D计算时的TypeError问题

问题场景

现有一个名为crosstab的pandas DataFrame交叉表,数据如下:

01234
100801004500
5032038
4004040
20001001004400

执行以下代码计算Somers' D时触发TypeError:

from scipy.stats import somersd
somersd(crosstab)

错误信息如下:

TypeError: Invalid call to pythranized function
_concordant_pairs(int64[:, :] (with unsupported column-major
layout))' Candidates are:
- _concordant_pairs(int[:,:])
- _concordant_pairs(float[:,:])

问题根源

scipy.stats.somersd依赖的底层函数_concordant_pairs仅支持**行优先(C-order)的数组,而pandas DataFrame默认采用列优先(Fortran-order/column-major)**的数组存储格式,两者格式不匹配导致报错。

解决办法

将DataFrame转换为行优先的numpy数组后再传入somersd即可,提供两种实现方式:

方式一:用np.ascontiguousarray转换

import numpy as np
from scipy.stats import somersd

# 转换为行优先格式的数组
crosstab_arr = np.ascontiguousarray(crosstab.values)
# 计算Somers' D
somers_result = somersd(crosstab_arr)
print(somers_result)

方式二:用to_numpy()指定行优先

from scipy.stats import somersd

# 直接生成行优先数组
crosstab_arr = crosstab.to_numpy(order='C')
# 计算Somers' D
somers_result = somersd(crosstab_arr)
print(somers_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:17:14