繁体   English   中英

如何在 NumPy 中重塑数组?

[英]How to reshape an array in NumPy?

我有一个 numpy 数组: array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object) ,女巫形状是(39104L,) . 如何将其重塑为数组,例如array([59, 72, 117, ..., 15530, 13091, 983], dtype=float32

我怀疑您的原始数组是一维列表数组:

array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object)
# shape (39104L,)

通常类似的东西是整数的二维数组

In [796]: x=np.array([[59], [72], [117], [15530], [13091], [983]])
In [797]: x
Out[797]: 
array([[   59],
       [   72],
       [  117],
       [15530],
       [13091],
       [  983]])
In [798]: x.shape
Out[798]: (6, 1)

但是如果这些列表中的一个或多个具有不同数量的元素,您将获得对象数组:

In [799]: x=np.array([[59], [72], [117], [15530,34], [13091], [983]])
In [800]: x
Out[800]: array([[59], [72], [117], [15530, 34], [13091], [983]], dtype=object)
In [801]: x.shape
Out[801]: (6,)

这说明了以下错误:

In [804]: np.asarray(x, dtype=float)
ValueError: setting an array element with a sequence.

In [805]: x.tolist()
Out[805]: [[59], [72], [117], [15530, 34], [13091], [983]]

试试这样的事情,看看你的数组中是否有任何元素长于 1:

In [806]: max([len(i) for i in x])
Out[806]: 2

您可能还需要显示一个或多个元素的类型以确认我的怀疑:

In [807]: type(x[0])
Out[807]: list

另外,这个数组是如何构造的?

如果形状是 (n_items,) 那么它已经是一个一维向量。 如果您想从中获得“普通”Python 列表,请使用numpy.ndarray.tolist()

对于一般的重塑,有numpy.reshape()方法。

正如您所写的,您的数组的形状应该是(39104L,1) ,而不是(39104L,) 也就是说,数组具有冗余维度。 您可以使用np.squeeze删除它。

对于一般的整形,您当然可以使用np.reshape ,在您的情况下也可以使用它代替np.squeeze

您问题的另一方面是您更改了数组的dtype 为此,您可以使用

a = np.asarray(a, dtype='float32')

其中a是您的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM