Nếu bạn muốn viết nó vào đĩa để dễ đọc trở lại dưới dạng một mảng numpy, hãy nhìn vào numpy.save
. Dưa nó cũng sẽ hoạt động tốt, nhưng nó kém hiệu quả hơn đối với các mảng lớn [mà của bạn không phải là hoàn toàn tốt].
Nếu bạn muốn nó là con người dễ đọc, hãy nhìn vào numpy.savetxt
.
EDIT: Vì vậy, có vẻ như savetxt
không hoàn toàn là một tùy chọn tuyệt vời cho các mảng có> 2 chiều ... nhưng chỉ để rút ra mọi thứ để kết luận đầy đủ: So, it seems like savetxt
isn't quite as great an option for arrays with >2 dimensions... But just to draw everything out to it's full conclusion:
Tôi chỉ nhận ra rằng numpy.savetxt
nghẹt thở trên ndarrays với hơn 2 chiều ... đây có lẽ là theo thiết kế, vì không có cách nào được xác định để chỉ ra các kích thước bổ sung trong tệp văn bản.
Ví dụ. Cái này [một mảng 2D] hoạt động tốt
import numpy as np
x = np.arange[20].reshape[[4,5]]
np.savetxt['test.txt', x]
Mặc dù điều tương tự sẽ thất bại [với một lỗi khá không chính xác:
import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
0] cho một mảng 3D:import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
Một cách giải quyết chỉ để chia mảng 3D [hoặc lớn hơn] thành các lát 2D. Ví dụ.
x = np.arange[200].reshape[[4,5,10]]
with open['test.txt', 'w'] as outfile:
for slice_2d in x:
np.savetxt[outfile, slice_2d]
Tuy nhiên, mục tiêu của chúng tôi là rõ ràng là người có thể đọc được, trong khi vẫn dễ dàng đọc lại với
import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
1. Do đó, chúng ta có thể có một chút dài dòng hơn và phân biệt các lát cắt bằng các dòng được nhận xét. Theo mặc định, import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
1 sẽ bỏ qua bất kỳ dòng nào bắt đầu bằng import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
3 [hoặc bất kỳ ký tự nào được chỉ định bởi import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
4 kwarg]. [Điều này trông có vẻ dài hơn thực tế ...]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']
Sản lượng này:
# 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
Đọc nó trở lại rất dễ dàng, miễn là chúng ta biết hình dạng của mảng ban đầu. Chúng ta chỉ có thể làm
import numpy as np
x = np.arange[200].reshape[[4,5,10]]
np.savetxt['test.txt', x]
5. Ví dụ như một ví dụ [bạn có thể làm điều này trong một dòng, tôi chỉ là một câu chuyện rõ ràng để làm rõ mọi thứ]:# 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]