基于另一个NumPy数组提供的索引位置,将字符串的NumPy数组拆分为2个新的NumPy数组

qnyhuwrf  于 2023-10-19  发布在  其他
关注(0)|答案(1)|浏览(89)

这是我的NumPy数组:

og_arr = [['5mm', '45"', '300 mm WT', 'Nan'], ['50mm', '3/5"', 'Nan', 'Nan']]

我写了一些逻辑,能够识别mm/inch字符串从哪个索引位置开始,这将导致以下数组。

index_arr = [[1, 2, 4, -1], [2, 3, -1, -1]]

我想将og_arr拆分为2个数组,分别称为valuesunits(基于index_arr),以便得到以下结果。

# perform some sort of indexing + splitting operation involving og_arr and index_arr
values = [['5', '45', '300', 'Nan'], ['50', '3/5', 'Nan', 'Nan']]
units =  [['mm', '"', 'mm WT', ''], ['mm', '"', '', '']]

我有一个使用for/while循环的解决方案,但是,我更感兴趣的是找出这类问题是否存在纯向量化的解决方案。

tag5nh1u

tag5nh1u1#

使用自定义的vectorized函数在给定的索引处拆分字符串:

splitter = lambda x, idx: (x[:], '') if idx == -1 else (x[:idx], x[idx:])
v_splitter = np.vectorize(splitter)

values, units = v_splitter(og_arr, index_arr)
In [23]: values
Out[23]: 
array([['5', '45', '300 ', 'Nan'],
       ['50', '3/5', 'Nan', 'Nan']], dtype='<U5')

In [24]: units
Out[24]: 
array([['mm', '"', 'mm WT', ''],
       ['mm', '"', '', '']], dtype='<U5')

相关问题