当前位置: 首页 > 面试题库 >

我如何切片一个numpy字符串数组的每个元素?

壤驷心思
2023-03-14
问题内容

Numpy有一些非常有用的字符串操作,可以向量化通常的Python字符串操作。

与这些操作和相比pandas.str,numpy字符串模块似乎缺少一个非常重要的模块:对数组中的每个字符串进行切片的功能。例如,

a = numpy.array(['hello', 'how', 'are', 'you'])
numpy.char.sliceStr(a, slice(1, 3))
>>> numpy.array(['el', 'ow', 're' 'ou'])

我是否在模块中缺少具有此功能的明显方法?否则,是否有一种快速的矢量化方法来实现这一目标?


问题答案:

这是向量化方法-

def slicer_vectorized(a,start,end):
    b = a.view((str,1)).reshape(len(a),-1)[:,start:end]
    return np.fromstring(b.tostring(),dtype=(str,end-start))

样品运行-

In [68]: a = np.array(['hello', 'how', 'are', 'you'])

In [69]: slicer_vectorized(a,1,3)
Out[69]: 
array(['el', 'ow', 're', 'ou'], 
      dtype='|S2')

In [70]: slicer_vectorized(a,0,3)
Out[70]: 
array(['hel', 'how', 'are', 'you'], 
      dtype='|S3')

运行时测试-

测试其他作者发布的所有方法,这些方法可以在最后使用,并且还包括本文前面的矢量化方法。

时间到了-

In [53]: # Setup input array
    ...: a = np.array(['hello', 'how', 'are', 'you'])
    ...: a = np.repeat(a,10000)
    ...:

# @Alberto Garcia-Raboso's answer
In [54]: %timeit slicer(1, 3)(a)
10 loops, best of 3: 23.5 ms per loop

# @hapaulj's answer
In [55]: %timeit np.frompyfunc(lambda x:x[1:3],1,1)(a)
100 loops, best of 3: 11.6 ms per loop

# Using loop-comprehension
In [56]: %timeit np.array([i[1:3] for i in a])
100 loops, best of 3: 12.1 ms per loop

# From this post
In [57]: %timeit slicer_vectorized(a,1,3)
1000 loops, best of 3: 787 µs per loop


 类似资料:
  • 本文向大家介绍在C ++中找到Numpy数组中每个字符串元素的长度,包括了在C ++中找到Numpy数组中每个字符串元素的长度的使用技巧和注意事项,需要的朋友参考一下 在这里,我们将看到如何获取Numpy数组中每个字符串元素的长度。Numpy是适用于Numeric Python的库,它具有非常强大的数组类。使用此方法,我们可以将数据存储在类似结构的数组中。为了得到长度,我们可以采用两种不同的方法,

  • 我试图计算每个字符串中的元音,我想根据count变量交换字符串,但我做不到。在接受字符串后,我用toCharArray()函数将其转换为char数组,并将每个字符与小写和大写元音进行比较。 我收到一个错误。编写代码部分的任何帮助都将不胜感激。 输入: 输出:

  • 问题内容: 我是Python的完整新手,但似乎给定的字符串可以(有效)为任意长度。也就是说,您可以加入并继续添加:。有没有办法制作这样的字符串数组? 当我尝试此操作时,每个元素仅存储一个字符 另一方面,我知道我可以初始化一定长度的字符串数组,即 最多可以存储10个字符串,最多256个字符。 问题答案: 您可以通过创建一个数组来实现。如果您尝试将长字符串分配给普通的numpy数组,则会截断该字符串:

  • 问题内容: 我想在Python列表中切片每个字符串。 这是我当前的列表: 这是我想要的结果列表: 我想从列表中的每个字符串中切掉最后两个字符。 我怎样才能做到这一点? 问题答案: 使用列表推导创建一个新列表,并将表达式的结果应用于输入列表中的每个元素;这是最后两个字符的切片,返回其余部分: 演示:

  • 在主流的编程语言中数组及其相关的数据结构是使用得最为频繁的,只有在它(们)不能满足时才会考虑链表、hash表(hash表可以看作是数组和链表的混合体)和更复杂的自定义数据结构。 Go语言中数组、字符串和切片三者是密切相关的数据结构。这三种数据类型,在底层原始数据有着相同的内存结构,在上层,因为语法的限制而有着不同的行为表现。首先,Go语言的数组是一种值类型,虽然数组的元素可以被修改,但是数组本身的

  • 问题内容: 我在Jenkins(v2.7.1)中完成了Pipeline作业,在此我想打印多行字符串参数()的每个元素,每行3个字符串: Foo , Bar , Baz 作为输入。 因此,我尝试了以下语法(使用和): 但是它失败了: :尚不支持在经过CPS转换的闭包上调用public static java.lang.Object org.codehaus.groovy.runtime.Defaul