如何将Numpy ndarray按指定行格式写入文本文件?
如何将NumPy数组按行写入文本文件?
你手里有这样一个NumPy ndarray:
[[1 2 3 4] [5 6 7 8] [9 10 11 12]]
想要把它写入文本文件,让每行对应原数组的一行,但你原来的代码运行后所有元素都挤在了同一行。先看看你原来的代码:
width, height = matrix.shape with open('file.txt', 'w') as foo: for x in range(0, width): for y in range(0, height): foo.write(str(matrix[x, y])) foo.close()
问题出在两个地方:一是你搞反了matrix.shape的顺序(NumPy里shape是(行数, 列数),所以width其实是行数,height是列数,虽然循环可能没报错,但逻辑上容易混淆);二是你既没给元素之间加空格,也没在每行结束后写入换行符,所以所有元素都连在了一起。
下面给你两种解决方法:
方法1:修改你的原循环代码
调整循环逻辑,把每行的元素用空格拼接成字符串,写完一行后加换行,同时用更直观的遍历方式:
import numpy as np matrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) rows, cols = matrix.shape # 纠正shape的顺序,rows是行数,cols是列数 with open('file.txt', 'w') as foo: for row in matrix: # 直接遍历每一行,比用索引更清晰 # 把当前行的每个元素转成字符串,用空格连接 row_content = ' '.join(map(str, row)) foo.write(row_content + '\n') # 注意:with语句会自动关闭文件,不需要手动调用foo.close()
方法2:用NumPy自带的savetxt方法(更简洁)
NumPy已经封装了专门的数组写入方法,一行代码就能搞定需求:
import numpy as np matrix = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]]) np.savetxt('file.txt', matrix, fmt='%d', delimiter=' ')
fmt='%d':指定输出格式为整数(如果你的数组是浮点数,可以改成%f或者其他格式)delimiter=' ':指定元素之间用空格分隔- 这个方法会自动按行写入数组,每行对应原数组的一行,完全符合你的要求。
这样修改后,生成的file.txt内容就是你想要的:
1 2 3 4 5 6 7 8 9 10 11 12
内容的提问来源于stack exchange,提问作者singrium
相关产品推荐
相关产品推荐

