我发现了一个奇怪的3D ndarray(参见附件),它没有显示最后一个维度的形状和dtype的变化(asarray或astype从'object'到np.float)不起作用。
对于每个维度,它是('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
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.
答案 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)