【问题标题】:Convert string containg array of floats to numpy array将包含浮点数组的字符串转换为 numpy 数组
【发布时间】:2019-09-10 13:13:12
【问题描述】:

我有一个浮点数数组,我希望将其转换为字符串以通过 JSON 传输:

import numpy as np
#Create an array of float arrays
numbers = np.array([[1.0, 2.0],[3.0,4.0],[5.0,6.0]], dtype=np.float64)
print(numbers)
[[1. 2.]
 [3. 4.]
 [5. 6.]]

#Convert each row in the array to string and separate by a ','
numbers_to_string_commas = ','.join(str(number) for number in numbers)
print(numbers_to_string_commas)
[1. 2.],[3. 4.],[5. 6.]

现在我希望将此字符串转换回原始的 numpy 数组。我尝试过使用以下内容,但我没有感到高兴:

a = np.fromstring(numbers_to_string_commas, dtype=np.float64, sep=',')
print(a)
[]

我该怎么做?

【问题讨论】:

  • 您可以搜索numpyjson,但我建议您使用numbers.tolist(),并使用json 对该(嵌套)列表进行编码。反面是np.array(json.loads(...))tolist 速度很快,json 可以很好地处理数字列表。

标签: python-3.x numpy numpy-ndarray


【解决方案1】:

我认为问题在于格式不是numpy所期望的formats,但如果字符串不是太大:

In [39]: eval('np.array([%s])' % '[1. 2.],[3. 4.],[5. 6.]'.replace(' ', ','))
Out[39]: 
array([[1., 2.],
       [3., 4.],
       [5., 6.]])

请注意,如果字符串很长,您可能会遇到问题: Why is there a length limit to python's eval?

【讨论】:

  • 谢谢,有多少数字太大了?会出现什么问题?
  • 除了大字符串的大小之外没有别的东西。将数字数据存储在字符串中的效率通常低于以某种二进制格式存储它们。你只需要关心它是否很大,请参阅编辑和添加的链接。
【解决方案2】:

也许您可以稍微修改一下您的“numbers_to_string_commas”,以便于重读。 这是另一个解决方案:

a=np.matrix(numbers_to_string_commas.replace(',',' ').replace('] [',';')[1:-1])
>>> a
matrix([[ 1.,  2.],
        [ 3.,  4.],
        [ 5.,  6.]])

这似乎是你想要的。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 2011-07-18
    • 2013-03-22
    • 1970-01-01
    • 2019-10-31
    • 2011-04-22
    • 1970-01-01
    • 2021-03-05
    • 2018-11-02
    相关资源
    最近更新 更多