【问题标题】:How to conditionally modify a numpy array string with ljust?如何使用 ljust 有条件地修改 numpy 数组字符串?
【发布时间】:2026-01-24 19:35:01
【问题描述】:

基本上,我有一个二进制字符串,假设'01111111',如果第一个字符是'0',那么我将保持原样。否则,如果第一个字符是'1',那么我就设置为'hi######'

但是,问题是,如果我尝试:

for x in np.nditer(array, op_flags=['readwrite']):
       if x.ljust(1) == '1':

然后它不起作用,因为 numpy 不允许 elementwise ljust。

有什么解决方法吗? 在此先感谢您,如果我在错误的地方发布此内容,我们深表歉意!

【问题讨论】:

  • ljust 是左对齐的函数。例如,'pie'.ljust(4) == 'pie '。你为什么要在这里使用 ljust ?它似乎与手头的任务无关。
  • array 到底是什么? D型,形状?样本值?
  • 我正在使用 ljust 来查找字符串的第一个字符。
  • array是一个numpy数组,Dtype = 'string' 例如'01111111'
  • ljust 与查找字符串中的第一个字符无关。

标签: python arrays python-2.7 numpy


【解决方案1】:

带有字符串的数组:

In [428]: arr = np.array([ '01111111' , '10101111' , '01011111' , '1111111' ])

np.char 有一些函数可以将字符串方法应用于此类数组的元素:

In [449]: np.char.ljust(arr,10)
Out[449]: 
array(['01111111  ', '10101111  ', '01011111  ', '1111111   '], 
      dtype='<U10')

包括一个测试方法

In [430]: np.char.startswith(arr,'1')
Out[430]: array([False,  True, False,  True], dtype=bool)

我们可以用它作为掩码来选择性地替换某些元素:

In [433]: arr[np.char.startswith(arr,'1')]='hi#####'
In [434]: arr
Out[434]: 
array(['01111111', 'hi#####', '01011111', 'hi#####'], 
      dtype='<U8')

【讨论】:

    【解决方案2】:

    为什么不只是:

    if str[0] == '1':
        str = "hi######"
    print(str)
    

    ?

    【讨论】:

    • if str[0] == '1': TypeError: 'type' object has no attribute 'getitem'
    • 以上评论有我的错误信息。
    最近更新 更多