python - 将数组的numpy数组转换为二维数组
问题描述
我有一个features
具有以下值的熊猫系列 ( features.values
)
array([array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]),
array([0, 0, 0, ..., 0, 0, 0]), ...,
array([0, 0, 0, ..., 0, 0, 0]), array([0, 0, 0, ..., 0, 0, 0]),
array([0, 0, 0, ..., 0, 0, 0])], dtype=object)
现在我真的希望这被识别为矩阵,但如果我这样做
>>> features.values.shape
(10000,)
而不是(10000, 3000)
我所期望的。
我怎样才能让它被识别为 2d 而不是以数组为值的 1d 数组。另外为什么它不会自动将其检测为二维数组?
解决方案
作为回应您的评论问题,让我们比较两种创建数组的方法
首先从数组列表中创建一个数组(长度相同):
In [302]: arr = np.array([np.arange(3), np.arange(1,4), np.arange(10,13)])
In [303]: arr
Out[303]:
array([[ 0, 1, 2],
[ 1, 2, 3],
[10, 11, 12]])
结果是一个二维数字数组。
相反,如果我们创建一个对象 dtype 数组,并用数组填充它:
In [304]: arr = np.empty(3,object)
In [305]: arr[:] = [np.arange(3), np.arange(1,4), np.arange(10,13)]
In [306]: arr
Out[306]:
array([array([0, 1, 2]), array([1, 2, 3]), array([10, 11, 12])],
dtype=object)
请注意,此显示器与您的显示器一样。这是,通过设计一个一维数组。像列表一样,它包含指向内存中其他地方的数组的指针。请注意,它需要一个额外的构造步骤。的默认行为np.array
是尽可能创建多维数组。
要解决这个问题需要额外的努力。同样,需要一些额外的努力才能撤消它 - 创建二维数值数组。
简单地调用np.array
它不会改变结构。
In [307]: np.array(arr)
Out[307]:
array([array([0, 1, 2]), array([1, 2, 3]), array([10, 11, 12])],
dtype=object)
stack
确实将其更改为 2d。 stack
将其视为数组列表,并在新轴上连接。
In [308]: np.stack(arr)
Out[308]:
array([[ 0, 1, 2],
[ 1, 2, 3],
[10, 11, 12]])
推荐阅读
- python - 如何使用 Wand 在 Python 中为文本自动调整大小框以保持相同的字体大小
- javascript - 调用函数前解锁按钮
- servicestack - 允许服务堆栈中的范围请求
- python - 如何更改矩阵的字符?(没有 Numpy)
- python-3.x - 迭代 DF 以制作绘图
- node.js - TypeError:无法使用 React 在使用本地 IP 的移动设备上读取未定义的属性“getUserMedia”
- angular - 以角度设置 TinyMCE 编辑器页面大小插件的值
- ios - 在 SwiftUI 中将数组与 Identifiable 一致
- php - 从时间戳转换为日期时,Laravel 显示错误的日期:Y/n/j
- python - 如何使用 AddMultiplicationEquality 添加约束?