我有一个numpy
数组,想用json转储它。数组如下所示:
array([['foo', 'bar', 'something', ...
'more'],
['0.4', '0.7', '0.83', ...
'0.3', '0.62', '0.51']]
我想用json将其转储到一个字符串上,如下所示:
foo: 0.4
bar: 0.7
something: 0.51
...
我试过:
import jason
my_string = json.dumps(my_array)
但它抱怨道:
"not JSON serializable"
关于如何用json将其转储到字符串上有什么想法吗?
更新:
请不要以为我在乎订购,行应按以下顺序打印:
array[0,0] : array[0,1]
array[1,0] : array[1,1]
array[2,0] : array[2,1]
# etc ...
最佳答案
对我有用的是-因为有更大的1024x102 float64数组-转换为base64。
def Base64Encode(ndarray):
return json.dumps([str(ndarray.dtype),base64.b64encode(ndarray),ndarray.shape])
def Base64Decode(jsonDump):
loaded = json.loads(jsonDump)
dtype = np.dtype(loaded[0])
arr = np.frombuffer(base64.decodestring(loaded[1]),dtype)
if len(loaded) > 2:
return arr.reshape(loaded[2])
return arr
''' just to compare '''
def SimpleEncode(ndarray):
return json.dumps(ndarray.tolist())
def SimpleDecode(jsonDump):
return np.array(json.loads(jsonDump))
IPython %TimIT结果非常清楚地指向Base64:
arr = np.random.random_sample((1000, 1000))
print 'Simple Convert'
%timeit SimpleDecode(SimpleEncode(arr))
print 'Base64 Encoding'
%timeit Base64Decode(Base64Encode(arr))
结果:
Simple Convert
1 loops, best of 3: 1.42 s per loop
Base64 Encoding
10 loops, best of 3: 171 ms per loop