首页 > 解决方案 > 2D numpy 数组显示为 1D

问题描述

train_data我有一个长度的 numpy ndarray 200,其中每一行都是另一个长度的 ndarray 10304

但是,当我打印时np.shape(train_data),我得到(200, 1),当我打印时,我np.shape(train_data[0])得到,当我打印(1, )时,np.shape(train_data[0][0])我得到(10304, )

我对这种行为感到很困惑,因为我认为第一个np.shape(train_data)应该返回(200, 10304)

有人可以向我解释为什么会发生这种情况,我怎样才能让数组的形状为(200, 10304)

标签: pythonnumpy

解决方案


这是因为数组被构造为对象数组。基本上,数组中的每个元素都指向另一个大小为 (1, ) 的数组,该数组指向另一个大小为 (10304, ) 的数组。这不等同于 numpy 中的普通 ndarray,因此无法正确识别形状。您可以通过查看 dtypes 来检查这一点。

要复制您看到的内容:

import numpy as np

arr = np.empty(200, dtype='object')
for i in range(200):
    temp_arr = np.empty(1, dtype='object')
    temp_arr[0] = np.zeros(10304)
    arr[i] = temp_arr
print(arr.shape)
print(arr[0].shape)
print(arr[0][0].shape)

(200,)
(1,)
(10304,)

要取回 (200, 10304) 数组,您需要“解包”它们:

new_arr = np.array([x[0] for x in arr])

#(200, 10304)

推荐阅读