python - 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)
?
解决方案
这是因为数组被构造为对象数组。基本上,数组中的每个元素都指向另一个大小为 (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)
推荐阅读
- python - 如何将图像数据分成x,y坐标?(Python)
- mysql - 基本 INSERT 语句的语法问题
- javascript - getSelection 在 iOS 12 中无法正常工作
- sql - SQL DateAdd 到包含英国和美国格式数据的列
- python - 为随机选择的单词中的字母创建空格
- regex - 在第一个 # 之后用 #Word 替换 Word
- angularjs - 数据未显示且 sbmit 按钮无法正常工作 MEAN 堆栈
- python - 追加到新数组后从数组中删除最小值
- java - “chrome.exe”“--allow-file-access-from-files”的永久解决方案
- asp.net-core - Restful api 从请求中接收数组