从MatLab转Python遇numpy.concatenate维度不匹配问题求助
解决NumPy concatenate维度不匹配问题(MATLAB转Python)
没错,你推测的原因完全正确!RHipFE是二维数组(101,1),而iHipFEn是一维数组(101,),np.concatenate要求所有输入数组的维度必须一致,这就是报错的根源。
最佳解决方案确实是把iHipFEn转换成(101,1)的二维列向量,在你的for循环里有几种简便的实现方式:
方法1:使用reshape
reshape是NumPy里调整数组维度的常用方法,你可以在生成iHipFEn后加上这一行:
iHipFEn = iHipFEn.reshape(-1, 1)
这里-1表示让NumPy自动计算该维度的大小(这里就是101),确保输出是101行1列的二维数组。
方法2:使用[:, np.newaxis]或[:, None]
这是NumPy中给一维数组快速增加维度的技巧,写法更简洁:
# 两种写法效果完全一致,选你习惯的即可 iHipFEn = iHipFEn[:, np.newaxis] # 或者 iHipFEn = iHipFEn[:, None]
优化你的完整代码
另外还有个小建议:你初始化RHipFE=np.empty([101, 1])会导致最终结果多一列初始的空值(因为第一次循环是把这个空列和第一个试次拼接),更合理的做法是初始化一个101行0列的空数组,这样每次拼接都是直接添加有效试次:
import numpy as np from scipy import interpolate # 初始化101行0列的空数组,避免多余的初始空列 RHipFE = np.empty([101, 0]) newlength = 101 for i in range(0, len(R0X)-1, 2): iHipFE = redataf.RHipFE[R0X[i]:R0X[i+1]] x = np.arange(0, len(iHipFE), 1) new_x = np.linspace(x.min(), x.max(), newlength) iHipFEn = interpolate.interp1d(x, iHipFE)(new_x) # 把一维数组转为101x1的二维列向量,这里用reshape举例 iHipFEn = iHipFEn.reshape(-1, 1) RHipFE = np.concatenate((RHipFE, iHipFEn), axis=1)
这样修改后,RHipFE最终会是一个(101, N)的二维数组,其中N是你的试次数量,完全符合你“将试次横向排列到单个变量中”的需求。
内容的提问来源于stack exchange,提问作者KBS
相关产品推荐
相关产品推荐

