在来回转换它们时,数组和字符串的长度不匹配

时间:2016-12-02 14:28:41

标签: python string pandas numpy multidimensional-array

我正在处理一个csv文件,该文件在一列中包含图像(矢量化)。这是the csv file ~240MB

我正在尝试将Image字符串转换为整数列表,重塑为矩阵,翻转,并将其重新整形为列表,然后最终转换回长字符串。但事情并没有达到我的预期。以下是我的代码:

import pandas as pd
import numpy as np
df = pd.read_csv('training.csv')
img = df['Image'][0] # take the first row as example
img_int = np.fromstring(img, sep=' ')  # img_int.shape --> (9216,), good.
img_matrix = img_int.reshape(96,96)
img_matrix_flipped = np.fliplr(img_matrix) # img_matrix_flipped.shape --> (96,96), good
img_matrix_flipped_vector = img_matrix_flipped.reshape(1, 9216) # img_matrix_flipped_vector.shape --> (1, 9216), good
img_matrix_flipped_vector_str = str(img_matrix_flipped_vector) # len(img_matrix_flipped_vector_str) --> 44, NOT GOOD!!!

我很困惑为什么len(img_matrix_flipped_vector_str)是44.不应该字符串包含所有9216个整数吗?请帮忙!

2 个答案:

答案 0 :(得分:1)

根据@ Dschoni的回答,我认为我不应该使用mkoctfile --mex -DMATLAB_MEX_FILE the_file.cpp 方法。然后我找到了another topic,这帮助我找到了解决方案:

str()

答案 1 :(得分:0)

我刚刚发现: 数组上的string()方法返回可打印的字符串表示形式。如果你打印这个字符串,你会看到数字,可能会缩短中间的“......”。 要将numpy数组转换为字符串,请在数组上使用tostring()tobytes()方法。 您也可能希望将重塑成一维数组而不是二维数组,其中一个轴的大小为1 (array.reshape(9216)而不是array.reshape(1,9216)),取决于您的目标。