python numpy数组元素数量更改4倍,导致numpy文件大小增加32倍

kdfy810k  于 2023-03-11  发布在  Python
关注(0)|答案(1)|浏览(168)

我有一个numpy形状数组(1684,129,522)。基本上是1684帧,尺寸为129 X522(只有一个通道,所以我没有在数组中指定它。)
我正在编写一个函数,它一次取4帧(每帧129 X 522),并创建一个大小为(4,129,522)的新输入numpy数组。
因此,最终结果将是从原始数组形状(1684 X 129 X 522)生成一个numpy数组形状(1684 X 4 X 129 X 522)。代码如下:
功能定义:

def create_frame_windows(episode, frame_window_length=4):
    episode_length, dim1, dim2=episode.shape
    new_episode=np.zeros((episode_length,frame_window_length,dim1, dim2))
    data_q_deque=deque(maxlen=4)
    for _ in range(frame_window_length):
        data_q_deque.append(np.zeros((dim1, dim2)))
    data_q=np.array(data_q_deque)
    print('Initial data queue',data_q.shape)
    for frame_no in range(len(episode)):
        frame=episode[frame_no]
        data_q[:-1]=data_q[1:]; data_q[-1]=frame
        new_episode[frame_no]=data_q
    print('New episode length',new_episode.shape)
    return new_episode

运行函数:

episode=np.load(os.path.join(paths.INPUT_DATA_PATH,epi_file))
print('Episode shape',episode.shape)
print('Initial size',sys.getsizeof(episode))
final_episode=create_frame_windows(episode,4)
print('Final episode shape',final_episode.shape)
print('Final size',sys.getsizeof(final_episode))

代码输出:

Episode shape (1684, 129, 522)
Initial size 113397336
Final episode shape (1684, 4, 129, 522)
Final size 3628710304

我的问题是,虽然剧集的形状符合预期,但最终剧集数组的大小是原始剧集数组大小的32倍(3628710304 / 113397336 = 31.99)。数组元素的数量仅增加了4倍。
我是否编写了错误的函数,或者是否有更符合逻辑的解释来解释为什么会发生这种情况?例如,numpy大小(磁盘上)增加了32倍,而元素数量增加了4倍

2vuwiymt

2vuwiymt1#

原始数组很可能由整数组成。默认情况下,np.zeros会创建更大的浮点数。
您可以将数据类型传递给np.zeros

相关问题