【问题标题】:dtypes. Difference between S1 and S2 in Python类型。 Python中S1和S2的区别
【发布时间】:2013-01-25 06:07:51
【问题描述】:

我有两个字符串数组:

In [51]: r['Z']
Out[51]: 
array(['0', '0', '0', ..., '0', '0', '0'], 
      dtype='|S1')

In [52]: r['Y']                                                                                                                
Out[52]: 
array(['X0', 'X0', 'X0', ..., 'X0', 'X1', 'X1'], 
      dtype='|S2')

S1 和 S2 有什么区别?仅仅是他们持有不同长度的条目吗?

如果我的数组有不同长度的字符串怎么办?

在哪里可以找到所有可能的 dtype 的列表以及它们的含义?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    请参阅dtypes documentation

    |S1|S2 字符串是数据类型描述符;第一个表示数组包含长度为 1 的字符串,第二个表示长度为 2 的字符串。| 管道符号是 byteorder flag;在这种情况下,不需要字节顺序标志,因此将其设置为|,表示不适用。

    【讨论】:

    • 我以为这敲响了警钟 - stackoverflow.com/questions/13997087/…
    • 谢谢!如果我的数组有不同长度的字符串会发生什么?有专门的 S 型吗?
    • @user273158:数组只能包含固定长度的项;不支持可变长度字符串,无论如何都不支持S。不过,您可以将对象引用 (dtype('O')) 存储在对象可以是 Python 字符串的位置。
    【解决方案2】:

    为了在 numpy 数组中存储可变长度的字符串,您可以将它们存储为 python 对象。例如:

    In [456]: x=np.array(('abagd','ds','asdfasdf'),dtype=np.object_)
    
    In [457]: x[0]
    Out[457]: 'abagd'
    
    In [459]: map(len,x)
    Out[459]: [5, 2, 8]
    
    In [460]: x[1]=='ds'
    Out[460]: True
    
    In [461]: x
    Out[461]: array([abagd, ds, asdfasdf], dtype=object)
    
    In [462]: str(x)
    Out[462]: '[abagd ds asdfasdf]'
    
    In [463]: x.tolist()
    Out[463]: ['abagd', 'ds', 'asdfasdf']
    
    In [464]: map(type,x)
    Out[464]: [str, str, str]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      相关资源
      最近更新 更多