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

从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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:03:23