Python中将数据集数组shape第三维设为字符串元素长度的实现方法
解决方案
1. 裁剪样本量到目标行数
如果你的原始数据行数大于需求的样本量,先截取对应行数的样本:
# 对应你最初提到的shape为(193,4)的数据集,截取前190行 df2 = df2[:190] # 如果是处理你后续给出的x_tr(shape为(930,5)),不需要裁剪可以跳过这一步
2. 扩展第三维度(拆分字符串为单个字符)
用numpy向量化操作直接拆分字符串,无需循环,自动适配字符串长度作为第三维度:
# 针对(190,4)的数组转(190,4,5) target_arr = df2.view('U1').reshape(df2.shape[0], df2.shape[1], -1) # 针对x_tr(930,5)转三维数组,直接调用即可,返回shape为(930,5,5) x_tr_target = x_tr.view('U1').reshape(x_tr.shape[0], x_tr.shape[1], -1)
3. 校验结果
可以通过以下代码验证转换是否符合预期:
# 查看输出维度 print(target_arr.shape) # 验证单条字符串拆分结果,原字符串为'00010'的话,输出为['0' '0' '0' '1' '0'] print(target_arr[0,0]) # 可选:提前校验所有字符串长度是否一致,避免转换错误 length_check = np.vectorize(len)(df2) print((length_check == 5).all()) # 返回True说明所有元素长度均为5,转换无问题
实现原理
view('U1')会将numpy数组中的每个Unicode字符串拆分为单个字符的数组,reshape时最后一维用-1会自动匹配字符串长度,不需要手动指定为5,适配性更强。
内容的提问来源于stack exchange,提问作者Sukhmani Kaur Thethi
相关产品推荐
相关产品推荐

