Python 格式化NumPy数组

Python 格式化NumPy数组,python,numpy,Python,Numpy,我想要这个: SP,1,2,3 1,1.000000e+00,2.000000e+00,3.000000e+00 2,1.630000e+01,1.990000e+01,1.840000e+01 3,1.630000e+01,1.990000e+01,1.840000e+01 4,1.630000e+01,1.990000e+01,1.840000e+01 我有以下代码: np.savetxt("Final Arr

我想要这个:

        SP,1,2,3
        1,1.000000e+00,2.000000e+00,3.000000e+00
        2,1.630000e+01,1.990000e+01,1.840000e+01
        3,1.630000e+01,1.990000e+01,1.840000e+01
        4,1.630000e+01,1.990000e+01,1.840000e+01
我有以下代码:

np.savetxt("Final Array.csv", my_array, fmt="%10.6e", delimiter=',')
它产生:

    1.000000e+00,2.000000e+00,3.000000e+00
    1.630000e+01,1.990000e+01,1.840000e+01
    1.630000e+01,1.990000e+01,1.840000e+01
    1.630000e+01,1.990000e+01,1.840000e+01
我已经为顶行和左列创建了数组

如何设置格式,以便在保留最左边的列的同时保持数字格式正确,而最上面的行保持格式不变

我使用vstack和hstack来组合这些,但是“SP”也会引起问题,因为它不是浮点


我可以把它们格式化,转换成一个字符串,合并,然后保存TXT吗?

类似这样的东西怎么样:

 from cStringIO import StringIO
 from itertools import izip

 # savetxt into a string
 sio = StringIO()
 np.savetxt(sio, my_array, fmt="%10.6e", delimeter=',')
 data_lines = sio.getvalue().split('\n')

 with open('Final Array.csv', 'w') as f:
     f.write(header_string + '\n')
     for leftcol, main in izip(left_column, data_lines):
         f.write(leftcol + ',' + main)
或者完全不使用
savetxt
来执行此操作:

with open('Final Array.csv', 'w') as f:
    f.write(header_string + '\n')
    for label, row in izip(left_column, my_array):
        f.write(str(label) + ',' + ','.join('%10.6e' % x for x in row) + '\n')

比如说:

 from cStringIO import StringIO
 from itertools import izip

 # savetxt into a string
 sio = StringIO()
 np.savetxt(sio, my_array, fmt="%10.6e", delimeter=',')
 data_lines = sio.getvalue().split('\n')

 with open('Final Array.csv', 'w') as f:
     f.write(header_string + '\n')
     for leftcol, main in izip(left_column, data_lines):
         f.write(leftcol + ',' + main)
或者完全不使用
savetxt
来执行此操作:

with open('Final Array.csv', 'w') as f:
    f.write(header_string + '\n')
    for label, row in izip(left_column, my_array):
        f.write(str(label) + ',' + ','.join('%10.6e' % x for x in row) + '\n')

一个简单的解决方案需要创建一个与
my_array
长度相同的临时数组和一个额外的列

temp = np.empty((my_array.shape[0], my_array.shape[1]+1))
然后,用所需的索引填充第一列,用初始数组填充最后一列:

temp[:,1:] = my_array
temp[:,0] = np.arange(1, len(my_array)+1)
要写入头文件,必须先以书面形式打开文件。您仍然可以将file对象传递给
np.savetxt
,只需修改格式字符串,使第一列写为
int
,其他列写为
“%10.6e”

根据
my_array
的列数,定义格式字符串的一种更具交互性的方法是

fmt = ",".join(["%i"] + ["%10.6e"] * my_array.shape[1])
np.savetxt(f, temp, fmt=fmt, delimiter=",")

一个简单的解决方案需要创建一个与
my_array
长度相同的临时数组和一个额外的列

temp = np.empty((my_array.shape[0], my_array.shape[1]+1))
然后,用所需的索引填充第一列,用初始数组填充最后一列:

temp[:,1:] = my_array
temp[:,0] = np.arange(1, len(my_array)+1)
要写入头文件,必须先以书面形式打开文件。您仍然可以将file对象传递给
np.savetxt
,只需修改格式字符串,使第一列写为
int
,其他列写为
“%10.6e”

根据
my_array
的列数,定义格式字符串的一种更具交互性的方法是

fmt = ",".join(["%i"] + ["%10.6e"] * my_array.shape[1])
np.savetxt(f, temp, fmt=fmt, delimiter=",")

是否有一种方法可以只生成第一个I%,然后生成所有连续的10.6e?问题是数组可以是可变大小的。为什么数组中有字符串?!是否有一种方法可以只生成第一个I%,然后生成所有连续的10.6e?问题是数组可以是可变大小的。为什么数组中有字符串?!