我找不到%
格式化規格中的任何內容,這些規格會爲浮點數創建一個hex
(對於整數,只需%x
)。所以,接受你的float.hex
,我可以創建數組中的每一個浮動轉換爲十六進制字符串的函數:
def foo(x):
return x.hex()
vfoo=np.vectorize(foo) # just for ease of applying foo to an array
In [478]: x=np.arange(12.).reshape(3,4)/3
In [479]: x
Out[479]:
array([[ 0. , 0.33333333, 0.66666667, 1. ],
[ 1.33333333, 1.66666667, 2. , 2.33333333],
[ 2.66666667, 3. , 3.33333333, 3.66666667]])
In [480]: vfoo(x)
Out[480]:
array([['0x0.0p+0', '0x1.5555555555555p-2', '0x1.5555555555555p-1',
'0x1.0000000000000p+0'],
['0x1.5555555555555p+0', '0x1.aaaaaaaaaaaabp+0',
'0x1.0000000000000p+1', '0x1.2aaaaaaaaaaabp+1'],
['0x1.5555555555555p+1', '0x1.8000000000000p+1',
'0x1.aaaaaaaaaaaabp+1', '0x1.d555555555555p+1']],
dtype='<U20')
然後我可以使用通常savetxt
那些字符串寫入文件
In [481]: np.savetxt('test.txt',vfoo(x), fmt='%25s',delimiter=',')
它看起來像:
In [482]: cat test.txt
0x0.0p+0, 0x1.5555555555555p-2, 0x1.5555555555555p-1, 0x1.0000000000000p+0
0x1.5555555555555p+0, 0x1.aaaaaaaaaaaabp+0, 0x1.0000000000000p+1, 0x1.2aaaaaaaaaaabp+1
0x1.5555555555555p+1, 0x1.8000000000000p+1, 0x1.aaaaaaaaaaaabp+1, 0x1.d555555555555p+1
和loadtxt
可以處理這個
In [486]: np.loadtxt('test.txt',delimiter=',')
Out[486]:
array([[ 0. , 0.33333333, 0.66666667, 1. ],
[ 1.33333333, 1.66666667, 2. , 2.33333333],
[ 2.66666667, 3. , 3.33333333, 3.66666667]])
loadtxt
使用這段代碼時,看到0x
列
/usr/lib/python3/dist-packages/numpy/lib/npyio.py in floatconv(x)
656 x.lower()
657 if b'0x' in x:
--> 658 return float.fromhex(asstr(x))
你可能會通過研究npyio.py
文件得到其他的想法。
這樣的文件中的分隔符是什麼? – hpaulj
@hpaulj:任何不會干擾數據:逗號,標籤,[美國](https://en.wikipedia.org/wiki/C0_and_C1_control_codes#Field_separators)等 – kjo
是否有'%'格式可以工作?例如'%???'%12.23'? – hpaulj