# String Slicing and clipping in Numba

**URL:** <https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886>\
**Category:** Numba\
**Created:** [April 10, 2023, 5:12pm UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886 "2023-04-10T17:12:22Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![lasso45](https://avatars.discourse-cdn.com/v4/letter/l/58956e/32.png) [@lasso45](https://numba.discourse.group/u/lasso45)\
**Post date:** [April 10, 2023, 5:12pm UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/1 "2023-04-10T17:12:22Z")

</div>

I have a string array (pretty huge ~1Billion elements) and another array with integers. I want to slice the individual string based on its corresponding element in the second array. I have got it worked in python but when I try to translate it to numba, I get error (I believe numba is prohibiting string slicing for e.g. a = ‘abc’; a[1:] #string slice. Any way to solve this problem?

I am trying to jit the following python\_clipper function:

```auto
arr1 = ['abc', 'def', 'xyz']
arr2 = [1,2,3]

def python_clipper(arr1,arr2):
    for i in range(len(arr1)):
        arr1[i] = arr1[i][arr2[i]:]
    return arr1

print(python_clipper(arr1,arr2)) # ['bc', 'f', '']

```

I am ok with arr1 and arr2 being np.array as well.

---

<div class="post-metadata">

**Author:** ![nelson2005](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/nelson2005/32/47_2.png) [@nelson2005](https://numba.discourse.group/u/nelson2005)\
**Post date:** [April 11, 2023, 1:42am UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/2 "2023-04-11T01:42:04Z")

</div>

Do you have an example of what you’d like to do that works in plain python but not when numba jitted?

---

<div class="post-metadata">

**Author:** ![gmarkall](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/gmarkall/32/42_2.png) [@gmarkall](https://numba.discourse.group/u/gmarkall)\
**Post date:** [April 11, 2023, 9:32am UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/3 "2023-04-11T09:32:26Z")

</div>

Do you have access to an NVIDIA GPU? If you aren’t able to find a Numba-only solution, it may be that [cuDF](https://docs.rapids.ai/api/cudf/stable/) would enable your use case, as it includes Numba extensions for string handling: [Overview of User Defined Functions with cuDF — cudf 23.02.00 documentation](https://docs.rapids.ai/api/cudf/stable/user_guide/guide-to-udfs.html#string-data)

---

<div class="post-metadata">

**Author:** ![lasso45](https://avatars.discourse-cdn.com/v4/letter/l/58956e/32.png) [@lasso45](https://numba.discourse.group/u/lasso45)\
**Post date:** [April 11, 2023, 3:15pm UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/4 "2023-04-11T15:15:29Z")

</div>

@nelson2005 I have edited the post to include the example.  
@gmarkall I have the nvidia GPU but am unfamiliar with cuDF. I will go through the docs to see how I can implement it.

---

<div class="post-metadata">

**Author:** ![nelson2005](https://yyz2.discourse-cdn.com/free1/user_avatar/numba.discourse.group/nelson2005/32/47_2.png) [@nelson2005](https://numba.discourse.group/u/nelson2005)\
**Post date:** [April 11, 2023, 5:56pm UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/5 "2023-04-11T17:56:55Z")

</div>

Something like this works for me

```python
import numba
import numpy as np

arr1 = np.asarray(['abc', 'def', 'xyz'])
arr2 = np.asarray([1, 2, 3])

@numba.njit()
def python_clipper(arr1, arr2):
    for i in range(len(arr1)):
        arr1[i] = str(arr1[i])[arr2[i]:]
    return arr1

print(python_clipper(arr1,arr2)) # ['bc', 'f', '']

```

---

<div class="post-metadata">

**Author:** ![lasso45](https://avatars.discourse-cdn.com/v4/letter/l/58956e/32.png) [@lasso45](https://numba.discourse.group/u/lasso45)\
**Post date:** [April 11, 2023, 6:30pm UTC](https://numba.discourse.group/t/string-slicing-and-clipping-in-numba/1886/6 "2023-04-11T18:30:05Z")

</div>

How about with @cuda.jit()?
