【问题标题】:Is there a built-in function to do the reverse of numpy.fromstring?是否有一个内置函数来执行 numpy.fromstring 的反向操作?
【发布时间】:2017-04-10 12:10:27
【问题描述】:

我刚刚了解到 numpy.fromstring() 是一个方便的函数:

a = ('1 2 3')
# convert to list of numbers
b = np.fromstring(a, sep=' ')

现在我修改了b 并希望将其转换回字符串列表。 numpy 中是否有内置函数可以做到这一点?

抱歉,我最初的问题可能不准确。我要做的是将b转换成与a相同的格式。

【问题讨论】:

  • np.fromstring(['1','2','3']) 似乎不起作用。

标签: python string numpy type-conversion


【解决方案1】:
In [490]: a='1 2 3'

如果您希望 b 元素是整数,而不是浮点数,请指定 dtype

In [491]: b=np.fromstring(a, sep=' ',dtype=int)
In [492]: b
Out[492]: array([1, 2, 3])
In [493]: b += 2            # typical array math
In [494]: b
Out[494]: array([3, 4, 5])

普通数组显示字符串,通过 print 或 str。请注意,数组str 省略了逗号;这只是将其与列表区分开来的视觉线索。

In [495]: print(b)
[3 4 5]
In [496]: str(b)
Out[496]: '[3 4 5]'

我们可以去掉[] 得到类似a 的显示

In [497]: str(b)[1:-1]
Out[497]: '3 4 5'

但是' '.join 是一个很好的列表格式化技巧:

In [500]: [str(i) for i in b]
Out[500]: ['3', '4', '5']
In [501]: ' '.join([str(i) for i in b])
Out[501]: '3 4 5'

我们可以轻松地将 a 拆分为字符串列表,修改这些字符串,然后重新加入

In [506]: a1=a.split()
In [508]: a1
Out[508]: ['1', '2', '3']
In [509]: a1[1]='34'
In [510]: a1
Out[510]: ['1', '34', '3']
In [511]: ' '.join(a1)
Out[511]: '1 34 3'

【讨论】:

  • 这个答案准确而全面!我真的很感激!
【解决方案2】:

根据这些答案ans.1 & ans.2

你可以通过 python 本身或使用 numpy 来解决这个问题。

纯python解决方案:

map(str, b)
# ['1.0' '2.0' '3.0']

numpy 解决方案:

list(np.char.mod('%d', b))
# ['1' '2' '3']

【讨论】:

    【解决方案3】:

    列表理解解决方案:

    ' '.join(str(x) for x in b)
    # '1.0 2.0 3.0'
    

    或:

    ' '.join("%d" % x for x in b)
    # '1 2 3'
    

    【讨论】:

      【解决方案4】:

      只是想出了(可能)最简单的方法:

      str(b)

      :0)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-08
        • 2023-03-07
        相关资源
        最近更新 更多