我有一个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倍
1条答案
按热度按时间2vuwiymt1#
原始数组很可能由整数组成。默认情况下,
np.zeros
会创建更大的浮点数。您可以将数据类型传递给
np.zeros
。