将多维numpy数组的元素转换为float32

时间:2019-10-22 06:18:10

标签: python-3.x numpy numpy-ndarray

我有一个复杂的嵌套numpy数组,其中包含列表。我正在尝试将元素转换为float32。但是,它给了我以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-225-22d2824961c2> in <module>
----> 1 x_train_single.astype(np.float32)

ValueError: setting an array element with a sequence.

这是代码和示例输入:

    x_train_single.astype(np.float32)

    array([[ list([[[0, 0, 0, 0, 0, 0]], [-1.0], [0]]),
    list([[[0, 0, 0, 0, 0, 0], [173, 8, 172, 0, 0, 0]], [-1.0], [0]])
   ]])

3 个答案:

答案 0 :(得分:0)

如果列数固定,则

np.array([l.astype(np.float) for l in x_train_single.squeeze()])

但是它将删除多余的维,将所有内容转换为numpy数组。

之前:(1、1、1、11、6)

之后:(11,6)

答案 1 :(得分:0)

尝试一下:

np.array(x_train_single.tolist())   

好像您有一个(1,1)形状的数组,其中单个元素是一个列表。并且子列表的大小一致。

我希望您会得到一个形状为(1、1、1、11、6、6)和int dtype的数组。

或:

np.array(x_train_single[0,0])

再次从数组中提取列表,然后从中创建一个数组。

到目前为止,我的回答基于显示内容:

array([[list([[[173, 8, 172, 0, 0, 0], [512, 58, 57, 0, 0, 0],  
     ...: [513, 514, 0, 0, 0, 0], [515, 189, 516, 0, 0, 0], [309, 266, 0, 0, 0, 
     ...: 0],  
     ...: [32, 310, 0, 0, 0, 0], [271, 58, 517, 0, 0, 0], [164, 40, 0, 0, 0, 0],
     ...:  [38, 32, 60, 0, 0, 0], [38, 83, 60, 0, 0, 0], [149, 311, 0, 0, 0, 0]]
     ...: ])]])

新显示更加复杂

array([[ list([[[0, 0, 0, 0, 0, 0]], [-1.0], [0]]), 
     ...:     list([[[0, 0, 0, 0, 0, 0], [173, 8, 172, 0, 0, 0]], [-1.0], [0]])]])                                                                

因为内部列表的大小不同。不能将其制成数字dtype数组。

它可以变成(1,2,3)形状的数组,但仍然是带有1d列表元素的dtype对象。

答案 2 :(得分:0)

由于您的数组包含不同大小和嵌套深度的列表,因此我怀疑是否存在简单或快速的解决方案。

这是“无所事事”的方法。它有两种口味。一个创建叶子的数组,另一个列出。

/path/to/my/file/${variable1:+${variable1}_}${variable2}/Still/some/path