计算ndarray的Z-score时触发数组真值判断歧义错误求助
问题分析与解决
核心原因:数组类型为object
从np.info的输出能明确看到ts_all的类型是object,而非数值类型(比如float64)。stats.zscore处理object类型数组时,内部逻辑会触发隐含的布尔判断,进而抛出"truth value ambiguous"错误——哪怕你没写显式的布尔比较,函数内部也会用到这类判断。
错误根源:拼接函数参数传递错误
np.concatenate要求第一个参数是数组序列(比如列表或元组),你直接传入ts_1, ts_2会被解析成两个独立参数,不符合函数要求。正确写法是把两个数组放进列表:
ts_all = np.concatenate([ts_1, ts_2], axis=1)
错误的参数传递导致numpy无法正确合并数值数组,最终生成了object类型的ts_all。
关键修正步骤
- 修复拼接参数:将
ts_1和ts_2放入列表作为np.concatenate的第一个参数 - 转换为数值类型:显式将数组转为数值类型,避免loadmat读取时的类型异常
- 简化计算逻辑:无需循环,直接调用
stats.zscore指定轴方向即可完成计算
完整修正代码
data = loadmat('data.mat') ts_1 = data['exp1'] ts_2 = data['exp2'] # 修正拼接方式并转换为float64类型 ts_all = np.concatenate([ts_1, ts_2], axis=1).astype(np.float64) # 直接计算每列的Z-score,axis=0表示按列计算 ts_all_z = stats.zscore(ts_all, axis=0)
内容的提问来源于stack exchange,提问作者Castro Pablo
相关产品推荐
相关产品推荐

