如何将包含object元素的NumPy数组编码为ASCII并输出为文本文件
错误原因与解决方法
你遇到的AttributeError: 'numpy.ndarray' object has no attribute 'encode'报错,本质是因为encode()是Python字符串专属方法,而你调用该方法的sum_matrix是numpy数组类型,本身不存在该方法。且np.savetxt本身已支持直接输出文本,不需要手动做编码转换。
除此之外你的代码还有一处逻辑错误:train_z_111本身是10行4列的二维数组,你将其reshape(10,1)后,每个数组元素会变成长度为4的列表,输出后格式不符合要求,不需要做这一步reshape。
正确代码示例
import numpy as np if __name__ == "__main__": train_x_111, train_y_111, train_z_111 = load_data() # load_data() returns three TF tensors # 转换为numpy数组 train_x = np.array(train_x_111) train_y = np.array(train_y_111) train_z = np.array(train_z_111) # 如果你需要的第一列是求和值,保留这段逻辑 features_data_int_2d = np.array(train_x_111, dtype=int) first_col = np.sum(features_data_int_2d, axis=1).reshape(-1, 1) # 如果你需要的第一列是示例里的1、2...9、0序号,替换上面的first_col为下面这行 # first_col = (np.arange(1, 11) % 10).reshape(-1, 1) # 维度对齐后按列拼接 col_x = train_x.reshape(-1, 1) col_y = train_y.reshape(-1, 1) sum_matrix = np.concatenate((first_col, col_x, col_y, train_z), axis=1) # 直接输出文件,无需手动编码 # 若需要空格分隔替换delimiter为' '(四个空格)即可匹配示例对齐效果 np.savetxt("my_file.txt", sum_matrix, fmt='%s', delimiter='\t', encoding='ascii')
补充说明
np.savetxt本身支持指定encoding参数,你可以显式传encoding='ascii'确保输出编码符合要求fmt='%s'会自动将数组内所有类型的元素转为字符串输出,无需提前将数组转成object类型
内容的提问来源于stack exchange,提问作者user366312
相关产品推荐
相关产品推荐

