[英]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.