sea*_*ull 5 python numpy type-conversion
我已将一个数组作为字符串保存在文本文件中,希望在从文件读取时能够将其转换回数组:
str_arr = "[0.01 0.01 0.01 0.01 0.01 0.01]"
num_arr = np.fromstring(str_arr,dtype = np.float64 ,count = 6,sep = ' ')
Run Code Online (Sandbox Code Playgroud)
结果是num_array:
array([-1.00000000e+000, 6.94819184e-310, 6.94819184e-310,
6.94818751e-310, 6.94818751e-310, 6.94818751e-310])
Run Code Online (Sandbox Code Playgroud)
我期待着一系列0.01s
最有可能的是,您使用str将数组保存在文件中。那是错误的。
尽管在这种情况下,错误不可见,但对于较大的数组,很明显以这种方式保存的值将产生不正确的缓冲区。检查[SO]:ValueError:序列太大;不能大于 32(@CristiFati 的回答)了解更多详细信息。
尽管有一些简单的方法可以解决当前情况(对现有字符串进行额外处理),但它们只是解决方法(gainarii),而解决问题的正确方法(或至少其中之一)是正确序列化将其保存到文件时的数组 (使用[SciPy.Docs]: numpy.ndarray.tostring)。
Run Code Online (Sandbox Code Playgroud)>>> arr = np.array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) >>> arr array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) >>> >>> str_arr0 = str(arr) >>> str_arr0 '[0.01 0.01 0.01 0.01 0.01 0.01]' >>> str_arr1 = arr.tostring() >>> str_arr1 b'{\x14\xaeG\xe1z\x84?{\x14\xaeG\xe1z\x84?{\x14\xaeG\xe1z\x84?{\x14\xaeG\xe1z\x84?{\x14\xaeG\xe1z\x84?{\x14\xaeG\xe1z\x84?' >>> >>> arr_final = np.fromstring(str_arr1, dtype=np.float64) >>> arr_final array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) >>> >>> arr_final_wrong = np.fromstring(str_arr0[1:-1], dtype=np.float64, count=6, sep= " ") >>> arr_final_wrong array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) >>> >>> arr = np.array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01] * 10) >>> # This time, str(arr) will produce an invalid result ... >>> str(arr) '[0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01\n 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01\n 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01\n 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01 0.01\n 0.01 0.01 0.01 0.01]'
| 归档时间: |
|
| 查看次数: |
4466 次 |
| 最近记录: |