TypeError:数组dtype('object')和格式说明符('%。18e')

时间:2018-01-12 16:23:34

标签: python arrays numpy text save

我有以下数组:

X = np.array([image_array_to_vector1,image_array_to_vector2,image_array_to_vector3,image_array_to_vector4])

X的打印如下:

[array([167, 167, 169, ...,   1,   1,   1], dtype=uint8)
 array([42, 43, 43, ..., 41, 36, 34], dtype=uint8)
 array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)
 array([0, 0, 0, ..., 0, 0, 0], dtype=uint8)]

当我尝试将数据保存为txt时:

X_to_text_file = np.savetxt('x.txt',X)

我得到以下内容:

File "/Library/Python/2.7/site-packages/numpy/lib/npyio.py", line 1258, in savetxt
    % (str(X.dtype), format))
TypeError: Mismatch between array dtype ('object') and format specifier ('%.18e')

为什么?我该如何解决这个问题?

感谢。

4 个答案:

答案 0 :(得分:12)

如果没有一些示例数据,复制它有点困难,但这就是我想出来的。

class App : DaggerApplication() {

    override fun applicationInjector(): AndroidInjector<App> {
        return DaggerAppComponent.builder().create(this)
    }
}

正如@Artier指出的那样,Write object array to .txt file 中接受的答案末尾有一个小片段,指出你可以将数组保存为arr = np.array([np.array([1,2,3]), np.array([1,2,3,4])]) arr array([array([1, 2, 3]), array([1, 2, 3, 4])], dtype=object) np.savetxt('x.txt', arr) TypeError: Mismatch between array dtype ('object') and format specifier ('%.18e') 的字符串。使用这种格式似乎可以解决我的问题(再次,我无法在没有数据样本的情况下重新创建您的问题)。

fmt='%s'

我想指出,如果你想保存不同的数组,并希望一个位置保留它们savez非常有用。

答案 1 :(得分:2)

本质上savetxt正在做:

for row in your_array:
    print(fmt % tuple(row))

其中fmt构造了您的fmt参数(或默认值)以及列数和分隔符。

你有一个对象数组(数组)。所以写/打印将是

 print(fmt % tuple(element))

%s是唯一可以处理数组(或其他常规对象)的格式。

savetxt旨在与2d数字数组一起使用,这将产生需要csv列的事物。试图在像这个对象数组这样的其他东西上使用它会让你头疼。

In [2]: A = np.empty((3,),dtype=object)
In [3]: A[:] = [np.arange(3),np.arange(1,4), np.arange(-3,0)]
In [4]: A
Out[4]: array([array([0, 1, 2]), array([1, 2, 3]), array([-3, -2, -1])], dtype=object)

In [6]: np.savetxt('test',A,fmt='%s')
In [7]: cat test
[0 1 2]
[1 2 3]
[-3 -2 -1]

迭代1d数组,它必须跳过tuple。在任何情况下,您可以做的最好的是%s格式。否则编写自己的自定义文件编写器。 savetxt并不特别或强大。

In [9]: for row in A:
   ...:     print('%s'%row)  
[0 1 2]
[1 2 3]
[-3 -2 -1]

答案 2 :(得分:1)

我有相同的错误消息,并且看来问题出在长度不同的数组上。因此,您需要确保提供长度相等的np.savetxt数组。

答案 3 :(得分:0)

对我来说,使用numpy = 1.13.1的较旧conda环境时发生错误。

更新为numpy = 1.16.2不会出现此类错误。