หากคุณต้องการที่จะเขียนมันไปยังดิสก์เพื่อที่ว่ามันจะง่ายต่อการอ่านกลับมาในฐานะที่เป็นอาร์เรย์ numpy numpy.save
ดูเป็น การดองก็ใช้ได้ดีเช่นกัน แต่มีประสิทธิภาพน้อยกว่าสำหรับอาร์เรย์ขนาดใหญ่ (ซึ่งไม่ใช่ของคุณดังนั้นก็ใช้ได้ดีเช่นกัน)
numpy.savetxt
หากคุณต้องการที่จะอ่านได้มนุษย์มองเข้าไป
แก้ไข: ดูเหมือนว่าsavetxt
จะไม่ใช่ตัวเลือกที่ยอดเยี่ยมสำหรับอาร์เรย์ที่มี> 2 มิติ ... แต่เพียงเพื่อดึงทุกอย่างออกมาให้ได้ข้อสรุปทั้งหมด:
ฉันเพิ่งรู้ว่าnumpy.savetxt
chokes บน ndarrays ที่มีมากกว่า 2 มิติ ... นี่อาจเป็นเพราะการออกแบบเนื่องจากไม่มีวิธีกำหนดโดยธรรมชาติในการระบุมิติเพิ่มเติมในไฟล์ข้อความ
เช่นนี้ (อาร์เรย์ 2D) ทำงานได้ดี
import numpy as np
x = np.arange(20).reshape((4,5))
np.savetxt('test.txt', x)
ในขณะที่สิ่งเดียวกันจะล้มเหลว (ด้วยข้อผิดพลาดที่ค่อนข้างไม่เป็นข้อมูล :) TypeError: float argument required, not numpy.ndarray
สำหรับอาร์เรย์ 3 มิติ:
import numpy as np
x = np.arange(200).reshape((4,5,10))
np.savetxt('test.txt', x)
วิธีแก้ปัญหาอย่างหนึ่งคือการแบ่งอาร์เรย์ 3 มิติ (หรือสูงกว่า) ออกเป็นชิ้น 2 มิติ เช่น
x = np.arange(200).reshape((4,5,10))
with file('test.txt', 'w') as outfile:
for slice_2d in x:
np.savetxt(outfile, slice_2d)
numpy.loadtxt
แต่เป้าหมายของเราคือการเป็นมนุษย์อย่างชัดเจนอ่านได้ในขณะที่ยังคงถูกอ่านได้อย่างง่ายดายกลับไปอยู่กับ ดังนั้นเราสามารถเพิ่มความละเอียดมากขึ้นและแยกความแตกต่างของชิ้นงานโดยใช้บรรทัดที่แสดงความคิดเห็น โดยค่าเริ่มต้นnumpy.loadtxt
จะไม่สนใจบรรทัดใด ๆ ที่ขึ้นต้นด้วย#
(หรืออักขระใดก็ตามที่ระบุโดยcomments
kwarg) (ดูละเอียดกว่าที่เป็นจริง ... )
import numpy as np
# Generate some test data
data = np.arange(200).reshape((4,5,10))
# Write the array to disk
with open('test.txt', 'w') as outfile:
# I'm writing a header here just for the sake of readability
# Any line starting with "#" will be ignored by numpy.loadtxt
outfile.write('# Array shape: {0}\n'.format(data.shape))
# Iterating through a ndimensional array produces slices along
# the last axis. This is equivalent to data[i,:,:] in this case
for data_slice in data:
# The formatting string indicates that I'm writing out
# the values in left-justified columns 7 characters in width
# with 2 decimal places.
np.savetxt(outfile, data_slice, fmt='%-7.2f')
# Writing out a break to indicate different slices...
outfile.write('# New slice\n')
สิ่งนี้ให้ผล:
# Array shape: (4, 5, 10)
0.00 1.00 2.00 3.00 4.00 5.00 6.00 7.00 8.00 9.00
10.00 11.00 12.00 13.00 14.00 15.00 16.00 17.00 18.00 19.00
20.00 21.00 22.00 23.00 24.00 25.00 26.00 27.00 28.00 29.00
30.00 31.00 32.00 33.00 34.00 35.00 36.00 37.00 38.00 39.00
40.00 41.00 42.00 43.00 44.00 45.00 46.00 47.00 48.00 49.00
# New slice
50.00 51.00 52.00 53.00 54.00 55.00 56.00 57.00 58.00 59.00
60.00 61.00 62.00 63.00 64.00 65.00 66.00 67.00 68.00 69.00
70.00 71.00 72.00 73.00 74.00 75.00 76.00 77.00 78.00 79.00
80.00 81.00 82.00 83.00 84.00 85.00 86.00 87.00 88.00 89.00
90.00 91.00 92.00 93.00 94.00 95.00 96.00 97.00 98.00 99.00
# New slice
100.00 101.00 102.00 103.00 104.00 105.00 106.00 107.00 108.00 109.00
110.00 111.00 112.00 113.00 114.00 115.00 116.00 117.00 118.00 119.00
120.00 121.00 122.00 123.00 124.00 125.00 126.00 127.00 128.00 129.00
130.00 131.00 132.00 133.00 134.00 135.00 136.00 137.00 138.00 139.00
140.00 141.00 142.00 143.00 144.00 145.00 146.00 147.00 148.00 149.00
# New slice
150.00 151.00 152.00 153.00 154.00 155.00 156.00 157.00 158.00 159.00
160.00 161.00 162.00 163.00 164.00 165.00 166.00 167.00 168.00 169.00
170.00 171.00 172.00 173.00 174.00 175.00 176.00 177.00 178.00 179.00
180.00 181.00 182.00 183.00 184.00 185.00 186.00 187.00 188.00 189.00
190.00 191.00 192.00 193.00 194.00 195.00 196.00 197.00 198.00 199.00
# New slice
การอ่านย้อนกลับเป็นเรื่องง่ายมากตราบใดที่เรารู้รูปร่างของอาร์เรย์เดิม numpy.loadtxt('test.txt').reshape((4,5,10))
เราก็สามารถทำได้ เป็นตัวอย่าง (คุณสามารถทำได้ในบรรทัดเดียวฉันแค่อธิบายสิ่งต่าง ๆ อย่างละเอียด):
# Read the array from disk
new_data = np.loadtxt('test.txt')
# Note that this returned a 2D array!
print new_data.shape
# However, going back to 3D is easy if we know the
# original shape of the array
new_data = new_data.reshape((4,5,10))
# Just to check that they're the same...
assert np.all(new_data == data)
numpy.loadtxt
( docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html )