代码之家  ›  专栏  ›  技术社区  ›  limitless

如何找到正确的numpy`savetxt()`格式?

  •  1
  • limitless  · 技术社区  · 7 年前

    假设我有一个特殊的数据集:

    a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
                    [[4,5,6], 'austen', 'austen-sense']])
    

    format

    np.savetxt(f, a, fmt=format)
    

    我试过了 format=[[%d], %s, %s] documentation ,但我仍然收到一个类型错误。我错过了什么?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Inder Manali    7 年前

    简单的%s应该可以解决您的问题,尽管您也可以指定更复杂的格式,因此以下代码将起作用:

    import numpy as np
    a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
                     [[4,5,6], 'austen', 'austen-sense']])
    np.savetxt("abc",a,fmt="%s")
    

    之所以出现错误是因为默认格式是 浮动 %s公司 我们正在将格式设置为字符串。

        2
  •  1
  •   hpaulj    7 年前
    In [119]: a = np.asarray([[[1,2,3], 'austen', 'austen-emma'],
         ...:                  [[4,5,6], 'austen', 'austen-sense']])
         ...:                  
    In [120]: a
    Out[120]: 
    array([[list([1, 2, 3]), 'austen', 'austen-emma'],
           [list([4, 5, 6]), 'austen', 'austen-sense']], dtype=object)
    

    你的 a 生成对象数据类型数组。它包含字符串和列表。

    %s 格式:

    In [121]: np.savetxt('test', a, fmt='%s, %s, %s')  # or fmt='%s',delimiter=','
    In [122]: cat test
    [1, 2, 3], austen, austen-emma
    [4, 5, 6], austen, austen-sense
    

    结果是列表的打印表示,例如。 str([1,2,3]

    但是 csv 加载程序将无法处理列表表示。

    In [128]: np.savetxt('test', a, fmt='%s', delimiter=';')
    In [129]: cat test
    [1, 2, 3];austen;austen-emma
    [4, 5, 6];austen;austen-sense
    In [130]: np.genfromtxt('test',delimiter=';', dtype=str)
    Out[130]: 
    array([['[1, 2, 3]', 'austen', 'austen-emma'],
           ['[4, 5, 6]', 'austen', 'austen-sense']], dtype='<U12')
    

    不错-但列表已作为字符串加载。

    不管怎样,包括数组中的列表和字符串在加载时都会出现问题。没有标准化的格式 csv公司 csv公司