NumPy & Pandas
Fory 原生支持 numpy 数组和 pandas DataFrame,并对序列化进行了优化。
NumPy 数组序列化
大型数组会尽可能使用零拷贝:
import pyfory
import numpy as np
f = pyfory.Fory(xlang=False)
# Numpy arrays are supported natively
arrays = {
'matrix': np.random.rand(1000, 1000),
'vector': np.arange(10000),
'bool_mask': np.random.choice([True, False], size=5000)
}
data = f.serialize(arrays)
result = f.deserialize(data)
# Zero-copy for compatible array types
assert np.array_equal(arrays['matrix'], result['matrix'])
Pandas DataFrame
Fory 可以高效序列化 Pandas DataFrame:
import pyfory
import pandas as pd
import numpy as np
f = pyfory.Fory(xlang=False, ref=False, strict=False)
df = pd.DataFrame({
'a': np.arange(1000, dtype=np.float64),
'b': np.arange(1000, dtype=np.int64),
'c': ['text'] * 1000
})
data = f.serialize(df)
result = f.deserialize(data)
assert df.equals(result)
使用带外缓冲区实现零拷贝
处理大型数组时,为获得最佳性能,请使用带外序列化:
import pyfory
import numpy as np
f = pyfory.Fory(xlang=False, ref=False, strict=False)
# Large array
array = np.random.rand(10000, 1000)
# Out-of-band for zero-copy
buffer_objects = []
data = f.serialize(array, buffer_callback=buffer_objects.append)
buffers = [obj.getbuffer() for obj in buffer_objects]
result = f.deserialize(data, buffers=buffers)
assert np.array_equal(array, result)
支持的数组类型
np.ndarray(all dtypes)np.matrix- 结构化数组
- 记录数组