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?问题是数组可以是可变大小的。为什么数组中有字符串?!