我编写了一个函数,将序列数据转换为稀疏矩阵。我惊讶地发现
img = np.flip(img, axis = 0)
将矩阵存储器的大小从1928减小到128。
此外,无论我如何增加时间窗口的长度(稀疏矩阵的宽度),最终翻转矩阵的内存大小始终为128。
我以为
np.flip()
只创建了原始矩阵的视图,这意味着内存大小应该更改,所以我不明白为什么会发生这种情况。
函数如下所示
def gen_img(df, index, interval, height):
df = df[index-interval+1: index+1, :5]
max_price = df[:, 1].max()
min_price = df[:, 2].min()
if max_price == min_price:
return df, np.zeros((height, interval * 3), dtype="float32")
else:
df[:, :4] = np.around((height * 4 / 5) * (df[:, :4] - min_price) / (max_price - min_price) + height / 5)
df[:, 4] = np.around(df[:, 4].astype("float32") * height / 5 / df[:, 4].max())
df = df.astype(int)
img = np.zeros((height, interval * 3), dtype="float32")
print("check zero matrix size: {}".format(sys.getsizeof(img)))
for i in range(interval):
img[df[i, 0], i*3] = 1.0
print("check intermed1 matrix size: {}".format(sys.getsizeof(img)))
img[df[i, 3], i*3 + 2] = 1.0
img[df[i, 2] : df[i, 1] + 1, i*3 + 1] = 1.0
img[0 : df[i, 4] + 1, i*3 + 1] = 1.0
print("check intermed2 matrix size: {}".format(sys.getsizeof(img)))
img = np.flip(img, axis = 0)
print("check generated matrix size: {}".format(sys.getsizeof(img)))
return df, img
这是调试打印结果
check zero matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed1 matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed1 matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed1 matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed1 matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed1 matrix size: 1928, dtype: float32, shape: (30, 15)
check intermed2 matrix size: 1928, dtype: float32, shape: (30, 15)
check generated matrix size: 128, dtype: float32, shape: (30, 15)