- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有数千个长 (8640) 整数列表元组。例如:
type(l1)
bộ ba
len(l1)
2
l1[0][:10]
[0, 31, 23, 0, 0, 0, 0, 0, 0, 0]
l1[1][:10]
[0, 0, 11, 16, 24, 0, 0, 0, 0, 0]
我正在“pickle ”元组,似乎当元组属于列表时, pickle 文件比 numpy 数组时更轻。我不是 python 的新手,但绝不是专家,我真的不知道如何为不同类型的对象管理内存。我本来希望 numpy 数组更轻,但这是我在 pickle 不同类型的对象时得到的:
#elements in the tuple as a numpy array
l2 = [np.asarray(l1[i]) for i in range(len(l1))]
l2
[array([ 0, 31, 23, ..., 2, 0, 0]), array([ 0, 0, 11, ..., 1, 0, 0])]
#integers in the array are small enough to be saved in two bytes
l3 = [np.asarray(l1[i], dtype='u2') for i in range(len(l1))]
l3
[array([ 0, 31, 23, ..., 2, 0, 0], dtype=uint16),
array([ 0, 0, 11, ..., 1, 0, 0], dtype=uint16)]
#the original tuple of lists
with open('file1.pkl','w') as f:
pickle.dump(l1, f)
#tuple of numpy arrays
with open('file2.pkl','w') as f:
pickle.dump(l2, f)
#tuple of numpy arrays with integers as unsigned 2 bytes
with open('file3.pkl','w') as f:
pickle.dump(l3, f)
当我检查文件大小时:
$du -h file1.pkl
72K file1.pkl
$du -h file2.pkl
540K file2.pkl
$du -h file3.pkl
136K file3.pkl
因此,即使整数保存在两个字节中,file1 也比 file3 轻。我更喜欢使用数组,因为解压缩数组(并处理它们)比列表快得多。但是,我将存储大量这样的元组(在 pandas 数据框中),因此我也想尽可能优化内存。
我需要它工作的方式是,给出我做的元组列表:
#list of pickle objects from pickle.dumps
tpl_pkl = [pickle.dumps(listoftuples[i]) for i in xrange(len(listoftuples))]
#existing pandas data frame. Inserting new column
df['tuples'] = tpl_pkl
总的来说,我的问题是:为什么 numpy 数组在 pickle 到文件中后占用的空间比列表多?
也许如果我理解了我可以找到存储数组的最佳方式的原因。
提前感谢您的宝贵时间。
câu trả lời hay nhất
如果你想在磁盘上存储 numpy 数组,你根本不应该使用 dưa chua
。调查numpy.save()
及其亲属。
如果您使用的是 gấu trúc
,那么它也有自己的方法。您可能想咨询this articlehoặc câu hỏi này 的答案以获得更好的技术。
关于python - pickle numpy 数组或列表时 pickle 文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32485493/
Là đầu ra của tập lệnh, tôi có một mảng bị che khuất và một mảng bị che khuất tiêu chuẩn. Làm cách nào tôi có thể dễ dàng kiểm tra xem mảng đó có bị che hay không (có dữ liệu, thuộc tính mặt nạ) trong khi chạy tập lệnh? Câu trả lời hay nhất là bạn có thể vượt qua isin
Câu hỏi của tôi giả sử tôi có a = np.array([ np.array([1,2]), np.array([3,4]), np.array([5,6]), np.array( [ 7,8]), np.arra
Numpy có triển khai tích hợp sẵn cho phép lũy thừa mô-đun ma trận không? (Như user2357112 đã chỉ ra, tôi thực sự đang tìm cách giảm mô-đun theo phần tử) Một cách để lũy thừa theo mô-đun các số thông thường là sử dụng lũy thừa bình phương ( https://en
Tôi đã triển khai tính năng giảm độ dốc này trong Numpy: def gradientDescent(X, y, theta, alpha, iterations): m = len(y) for i
Tôi có một dự án chạy trên CentOS7 bằng Numpy. Vấn đề là việc cài đặt phần phụ thuộc này mất rất nhiều thời gian. Vì vậy, tôi đã thử yum install pip cài đặt thư viện gọn gàng trước khi cài đặt nó. Vì vậy, tôi chạy:
Xử lý dữ liệu tôi muốn xoay. Xin lưu ý rằng tôi bị giới hạn ở mức khó chịu và không thể sử dụng gấu trúc. Dữ liệu gốc như sau: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
numpy.random.seed(7) Trong các hướng dẫn phân tích dữ liệu và học máy khác nhau, tôi đã thấy tập hợp hạt giống này với các số khác nhau. Việc chọn một số hạt giống cụ thể có thực sự tạo ra sự khác biệt không? Hoặc bất kỳ số nào sẽ hoạt động? Mục tiêu của việc lựa chọn số lượng hạt giống là khả năng tái sản xuất của cùng một thí nghiệm.
Tôi cần đọc một phần của mảng lớn được lưu trữ trong tệp ánh xạ bộ nhớ, xử lý dữ liệu và lặp lại cho phần khác của mảng. Toàn bộ mảng gọn gàng chiếm khoảng 50 GB và máy của tôi có RAM 8 GB. Ban đầu tôi sử dụng numpy.m
Xử lý dữ liệu tôi muốn xoay. Xin lưu ý rằng tôi bị giới hạn ở mức khó chịu và không thể sử dụng gấu trúc. Dữ liệu gốc như sau: data = [ [ 1, a, [, ] ], [ 1, b, [, ] ], [ 2,
Có vẻ như mọi điều mà numpy.empty() có thể làm đều có thể được thực hiện dễ dàng với numpy.ndarray(), ví dụ: >>> np.empty(shape=(2, 2), dtype=np.dtype('d
Tôi có nhiều dạng khác nhau trong một mảng lớn và tôi muốn tính khoảng cách Euclide từ cạnh này sang cạnh khác bằng cách sử dụng numpy và scipy. Lưu ý: Tôi đã tìm kiếm và câu hỏi này khác với các câu hỏi trước đó trong ngăn xếp vì tôi muốn lấy khối thẻ trong mảng
Tôi có một mảng các đối tượng có kích thước nhỏ gọn (2x3). Chúng tôi gọi nó là M1. Có 6 mảng nhiều mảng trong M1. Hình dạng của các mảng trong một hàng nhất định của M1 giống nhau, nhưng không giống hình dạng của các mảng trong bất kỳ hàng nào khác của M1. Nghĩa là, M1 = [ [
Làm cách nào tôi có thể viết tích số chấm sau đây bằng ký hiệu Einstein? nhập numpy dưới dạng np LHS = np.ones((5,20,2)) RHS = np.ones((20,2)) np.sum([ np.
Giả sử tôi có np.array của a = [0, 1, 1, 0, 0, 1] và b = [1, 1, 0, 0, 0, 1] và tôi muốn một ma trận c mới sao cho nếu a[ tôi ] = 0 và b[i] = 0
Tôi có một mảng hình dạng nhiều mảng (32,5). Mỗi phần tử của lô chứa một mảng có nhiều mảng batch_elem = [s,_,_,_,_] trong đó s = [img,val1,val
Hãy thử huấn luyện mạng nơ-ron một lớp cho bài toán phân loại nhiều nhãn dựa trên văn bản. model= Sequential() model.add(Dense(20, input_dim=400, kernel_initializer='
Đầu tiên là một ví dụ đơn giản import numpy as np a = np.ones((2,2)) b = 2*np.ones((2,2)) c = 3*np.ones((2,2)) d = 4*np.
Tôi đang cố gắng tính trung bình một mảng có nhiều mảng 2D. Vì vậy, tôi đã sử dụng numpy.mean nhưng kết quả là mảng trống. nhập numpy dưới dạng np ws1 = np.array(ws1) ws1_I8 = np.ar
nhập numpy dưới dạng np x = np.array([[1,2 ,3], [9,8,7]]) y = np.array([[2,1 ,0], [1,0,2] ]) x[y] Đầu ra dự kiến: ar
Tôi có hai mảng A (4000,4000) trong đó chỉ có đường chéo chứa đầy dữ liệu và B (4000,5). Có cách nào nhanh hơn để nhân (chấm) các mảng này hơn hàm numpy.dot(a,b) không? Cho đến nay tôi đã tìm thấy
Tôi là một lập trình viên xuất sắc, rất giỏi!