NumPy二维数组创建异常:目标数组形状不符合预期
解决NumPy数组形状不匹配的问题
嘿,我来帮你搞定这个数组形状的小问题~
问题原因
你现在得到的y.shape是(194,),而不是预期的(194,1),核心原因是:当你把单个浮点数转成np.array(y)时,得到的是一个标量数组(形状为()),把一堆标量数组放到列表里再转成大数组,NumPy会自动把它压缩成一维数组。而x的形状是对的,因为你每个x都是两个元素的列表转成的数组(形状(2,)),合并后自然是二维的(194,2)。
几种解决办法
这里给你三个简单有效的方案,选哪个都行:
方案1:在添加元素时就做成二维结构
直接把y包装成列表再转数组,这样每个元素都是形状(1,)的数组,最后合并就会得到(194,1):
import numpy as np def parse_data(file_name): data = [] target = [] with open(file_name) as f: for line in f: temp = line.split() x = [float(x) for x in temp[:2]] y = float(temp[2]) data.append(np.array(x)) # 把y放进列表再转数组,强制变成(1,)的形状 target.append(np.array([y])) return np.array(data), np.array(target) x, y = parse_data("data.txt") print(y.shape) # 输出 (194, 1)
方案2:用reshape调整最终数组形状
如果你不想修改循环里的代码,可以在返回的时候用reshape(-1, 1),-1让NumPy自动计算行数,1固定列数:
import numpy as np def parse_data(file_name): data = [] target = [] with open(file_name) as f: for line in f: temp = line.split() x = [float(x) for x in temp[:2]] y = float(temp[2]) data.append(np.array(x)) target.append(np.array(y)) # 对target数组进行形状调整 return np.array(data), np.array(target).reshape(-1, 1) x, y = parse_data("data.txt") print(y.shape) # 输出 (194, 1)
方案3:用np.expand_dims扩展维度
和reshape类似,np.expand_dims可以直接给数组增加一个维度:
import numpy as np def parse_data(file_name): data = [] target = [] with open(file_name) as f: for line in f: temp = line.split() x = [float(x) for x in temp[:2]] y = float(temp[2]) data.append(np.array(x)) target.append(np.array(y)) # 在axis=1的位置(列维度)增加一个维度 return np.array(data), np.expand_dims(np.array(target), axis=1) x, y = parse_data("data.txt") print(y.shape) # 输出 (194, 1)
内容的提问来源于stack exchange,提问作者anon_swe
相关产品推荐
相关产品推荐

