Numpy Array剪切多行字符串

2ic8powd  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(115)

我一直在尝试将一些多行字符串保存在numpy数组中,如下所示:
但是,当我稍后检查数组的内容时,它是空的
我怀疑%可能在这里耍我,但我不知道如何处理它。

strings = np.empty(1, dtype=str) strings[0] = """         $_1 = 
    %_1.a =      25129 ± 92.3741
    $_2 = %_2.height =    11340.5 ± 1951.81
    $_3 = %_2.center =    63.4979 ± 0.275278
      $_4 = %_2.hwhm =     1.6318 ± 0.324661
    $_5 = %_3.height =    19482.3 ± 2420.92
    $_6 = %_3.center =    106.329 ± 0.12973
      $_7 = %_3.hwhm =    1.07347 ± 0.155327
    $_8 = %_4.height =    9985.67 ± 2382.35
    $_9 = %_4.center =    223.417 ± 0.257358
     $_10 = %_4.hwhm =   -1.11065 ± 0.30902
   $_11 = %_5.height =      61622 ± 2154.58
   $_12 = %_5.center =    443.983 ± 0.0458769
     $_13 = %_5.hwhm =      1.338 ± 0.0540433
   $_14 = %_6.height =    36949.9 ± 2230.42
   $_15 = %_6.center =    541.081 ± 0.0738621
     $_16 = %_6.hwhm =    1.24646 ± 0.086812
   $_17 = %_7.height =    28368.8 ± 2217.38
   $_18 = %_7.center =    693.312 ± 0.0968789
     $_19 = %_7.hwhm =    1.26497 ± 0.114331"""

print(strings[0])

在我的例子中,这给出了一个空字符串,而我期望它打印字符串。

pwuypxnk

pwuypxnk1#

In [1]: strings = np.empty(1, dtype=str)

如果我查看结果,我会看到dtype是'U1'。这是一个unicode字符。print(strings)不会显示这个。它应该是print(repr(strings)),这是ipython所显示的:

In [2]: strings
Out[2]: array([''], dtype='<U1')

任何赋给这个数组的字符串都将被剪切(有些人认为它至少应该给予一个警告):

In [3]: strings[0]='foobar'    
In [4]: strings
Out[4]: array(['f'], dtype='<U1')

我们可以从接受更长字符串的dtype开始:

In [5]: strings = np.empty(1, dtype='U100')    
In [6]: strings
Out[6]: array([''], dtype='<U100')    
In [7]: strings[0]='foobar'    
In [8]: strings
Out[8]: array(['foobar'], dtype='<U100')

np.array(['foobar'])'将选择一个dtype来匹配输入,但这样就不能用更长的字符串来替换它。
numpy并不是字符串的最佳选择。Python字符串可以是任意长度。由于它存储数据的方式,numpy使用固定(或最大)的'Un' dtype。否则,它不会添加太多自己的代码来处理字符串。因此,除非你真的需要多维布局的好处,否则你最好只使用python字符串和列表。

In [9]: ['foobar']
Out[9]: ['foobar']

您的多行字符串只是一个带有“\n”的字符串。

相关问题