【发布时间】:2017-01-07 12:55:06
【问题描述】:
我有一个 numpy 数组:array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object),女巫形状是 (39104L,)。如何将其重塑为数组,如array([59, 72, 117, ..., 15530, 13091, 983], dtype=float32?
【问题讨论】:
我有一个 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() 方法。
【讨论】:
AttributeError: 'list' object has no attribute 'tolist'
my_array,type(my_array)的输出是什么?
正如您所写,您的数组应该具有(39104L,1) 的形状,而不是(39104L,)。也就是说,该数组具有冗余维度。您可以使用np.squeeze 删除它。
对于一般的整形,您当然可以使用np.reshape,在您的情况下也可以使用它来代替np.squeeze。
您问题的另一个方面是您更改了数组的dtype。为此,您可以使用
a = np.asarray(a, dtype='float32')
a 是你的数组。
【讨论】:
ValueError: setting an array element with a sequence.