嗨,我正在开始使用 pandas/numpy,但遇到了一些障碍。
我对图像进行矢量化并将数据存储在 pandas 列中。
misc.imresize(misc.imread(path, mode='RGB')
数据看起来不错,但我无法以我需要的数组格式获取它。
>>> data['img_vec'].shape
(19641,)
>>> data['img_vec'][0].shape
(500, 500, 3)
>>> data['img_vec'][0].flatten().shape
(750000,)
>>> data['img_vec'].values.flatten()[0].shape
(500, 500, 3)
我真正想要的是让数据 img_vec 看起来像这样: (19641, 750000)
有什么好的方法可以做到这一点?
提前致谢
编辑: 感谢您的反馈:
>>> data['img_vec'][0].reshape((1, 750000), order='C').shape
(1, 750000)
但是:
>>> data['img_vec'].values.reshape((1, 750000), order='C').shape
and
>>> np.reshape(data['img_vec'].values, (1, 750000), order='C').shape
Return "ValueError: total size of new array must be unchanged"
我假设这是因为它试图在数据系列而不是单个元素上运行它。如何在整个数据系列上运行它?
另外:
>>> type(data)
pandas.core.frame.DataFrame
>>> type(data['img_vec'])
pandas.core.series.Series
>>> type(data['img_vec'][0])
numpy.ndarray
最佳答案
您有一系列 19,641 个形状为 (500, 500, 3)
的 numpy 数组,并且您需要一个形状为 (19641, 750000)
的 pandas 数据框。换句话说,您想要展平数组,并将它们的值放入列中。
诀窍是将展平的数组转换为 pandas 系列。这就是您如何告诉 apply
将数据放入列中,并返回包含 750,000 列的数据帧。
data['img_vec'].apply(lambda arr: pd.Series(arr.flatten()))
如果不转换为系列,apply
将返回一系列 19,641 个数组,长度为 750,000。
关于python - 从 pandas 中获取多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41550366/