如何在文件中写一个字符串和一个numpy数组?

时间:2016-04-26 20:08:27

标签: python numpy

我正在计算从目录中读取的图像的功能,我想在文件中写入图像路径和相应的功能,用空格分隔。以这种方式需要输出

/path/to/img1.jpg 1 0 0 1 3.5 0.2 0
/path/to/img2.jpg 0 0 0.5 2.1 0 0.7
...

以下是我的代码的一部分

features.open('file.txt', 'w')
for fname in fnmatch.filter(fileList, '*.jpg'):
    image = '/path/to/image'
    # All the operations are here
    myarray = [......] # array of dimensions 512x512
    myarray.reshape(1, 512*512) # Reshape to make it a row vector
    features.write(image + ' '.join(str(myarray)))
features.write('\n')
features.close()

但是输出是

/path/to/img1.jpg[[0 0 1.0 2 3]]
/path/to/img2.jpg[[1.2 0 1.0 2 0.3]]

1 个答案:

答案 0 :(得分:4)

您的问题在于以下声明:

>>> ' '.join(str(np.array([1,2,3])))
'[ 1   2   3 ]'

首先将数组转换为字符串格式

>>> str(np.array([1,2,3]))
'[1 2 3]'

然后将字符串的元素(单个字符)与中间的空格连接起来。

相反,您需要将numpy数组的各个元素转换为字符串列表,例如使用map

>>> map(str, np.array([1,2,3]))
['1', '2', '3']

只有这样才能加入结果字符串列表的元素:

>>> ' '.join(map(str, np.array([1,2,3])))
'1 2 3'

下一个问题将来自于你拥有的numpy数组实际上是二维的:

>>> map(str, np.array([[1,2,3]]))
['[1 2 3]']

这很容易解决,因为您已经使用reshape将其转换为单行。因此,只需将map应用于第一行:

>>> ' '.join(map(str, np.array([[1,2,3]])[0]))
'1 2 3'