câu hỏi đầu tiên tại đây. Tôi sẽ cố gắng súc tích.Cách lưu các từ điển và mảng trong cùng một kho lưu trữ (với numpy.savez)
Tôi đang tạo nhiều mảng chứa thông tin tính năng cho ứng dụng học máy. Khi các mảng không có kích thước bằng nhau, tôi lưu trữ chúng trong một từ điển chứ không phải trong một mảng. Có hai loại tính năng khác nhau, vì vậy tôi đang sử dụng hai từ điển khác nhau.
Tôi cũng tạo nhãn để đi kèm với các tính năng. Các nhãn này được lưu trữ trong mảng. Ngoài ra, có các chuỗi chứa các tham số chính xác được sử dụng để chạy tập lệnh và dấu thời gian.
Tất cả trong tất cả nó trông như thế này:
import numpy as np
feature1 = {}
feature2 = {}
label1 = np.array([])
label2 = np.array([])
docString = 'Commands passed to the script were...'
# features look like this:
feature1 = {'case 1': np.array([1, 2, 3, ...]),
'case 2': np.array([2, 1, 3, ...]),
'case 3': np.array([2, 3, 1, ...]),
and so on... }
Bây giờ mục tiêu của tôi sẽ là để làm điều này:
np.savez(outputFile,
saveFeature1 = feature1,
saveFeature2 = feature2,
saveLabel1 = label1,
saveLabel2 = label2,
saveString = docString)
này dường như làm việc (ví dụ như một tập tin được lưu với không có lỗi ném và có thể được tải lại). Tuy nhiên, khi tôi cố gắng tải ví dụ như tính năng từ tệp một lần nữa:
loadedArchive = np.load(outFile)
loadedFeature1 = loadedArchive['saveFeature1']
loadedString = loadedArchive['saveString']
Sau đó thay vì nhận lại từ điển, tôi nhận được một mảng hình khối (0) mà tôi không biết cách truy cập các nội dung:
In []: loadedFeature1
Out[]:
array({'case 1': array([1, 2, 3, ...]),
'case 2': array([2, 3, 1, ...]),
..., }, dtype=object)
Cũng chuỗi trở thành mảng và có được một datatype lạ:
In []: loadedString.dtype
Out[]: dtype('|S20')
Vì vậy, trong ngắn hạn, tôi giả định này không phải là cách nó được thực hiện một cách chính xác. Tuy nhiên tôi không muốn đặt tất cả các biến vào một từ điển lớn vì tôi sẽ lấy chúng trong một tiến trình khác và muốn lặp lại từ điển dictionary.keys() mà không phải lo lắng về so sánh chuỗi.
Bất kỳ ý tưởng nào được đánh giá cao. Cảm ơn
tuyệt vời! cảm ơn bạn! – surchs
Tôi thích truy cập vào phần tử trong mảng '()' bằng 'testarr.flat [0]'. Đối với người đọc tò mò, nó cũng có thể sử dụng một tuple trống như trong 'testarr [()]', nhưng điều này làm tổn thương khả năng đọc. –