将ndarray的dtype从object更改为float?

时间:2017-06-20 02:03:46

标签: python numpy multidimensional-array tuples itertools

我发现了一个奇怪的3D ndarray(参见附件),它没有显示最后一个维度的形状和dtype的变化(asarray或astype从'object'到np.float)不起作用。

file

对于每个维度,它是('object','object','float64')dtype的ndarray,实际形状是(2,3,24)但是形状显示为(2,3),这意味着(2,3)中的24维数组不计算。

当我尝试使用.asarray或.astype将此数组作为每个维度的'dtype = np.float'时,我收到错误ValueError: setting an array element with a sequence.

不幸的是,此前讨论过的方法都不适用于这种情况。 ValueError: setting an array element with a sequence

Numpy ValueError: setting an array element with a sequence. This message may appear without the existing of a sequence?

Error: Setting an array element with a sequence. Python / Numpy

ValueError :Setting an array element with a sequence using numpy

Python Numpy Error: ValueError: setting an array element with a sequence

如何为所有维度将数组的dtype更改为np.float,以便我可以使用典型的np操作?谢谢。

*我通过从python的collection.deque库中提取一些数据点来解决这个问题。 我存储了一系列dtype元组(ndarray-float,bool),并通过

选择一些作为ndarray

array = np.asarray(list(itertools.islice())).

我通过state_array = array[:,:,0]提取浮点元素。我想让state_array成为每个维度的纯粹的np.float dtype-d ndarray,但不能。发生的事情是这个state_array的'object'为数据类型state_array.asarray()np.array(state_array)不能使用下面的错误代码。

ValueError: setting an array element with a sequence.

1 个答案:

答案 0 :(得分:2)

下载后,我可以加载数组:

In [850]: data =np.load('../Downloads/strange_array.npy',encoding='latin1')
In [851]: data.shape
Out[851]: (2, 3)

元素的形状和dtype都相同,因此它们可以连接成3d数组:

In [852]: [i.shape for i in data.flat]
Out[852]: [(24,), (24,), (24,), (24,), (24,), (24,)]
In [853]: [i.dtype for i in data.flat]
Out[853]: 
[dtype('float64'),
 dtype('float64'),
 dtype('float64'),
 dtype('float64'),
 dtype('float64'),
 dtype('float64')]

如果我们将2x3形状展平,那么加入最容易:

In [854]: np.stack(data.ravel()).shape
Out[854]: (6, 24)
In [855]: np.stack(data.ravel()).reshape(2,3,24)