[英]Extend numpy array based on tags
如果我有
a1 = np.array([1,2,3,4])
a2 = np.array(list('abcd'))
b2 = np.array(list('aabcccdd'))
我如何到达b1应该是
array([1, 1, 2, 3, 3, 3, 4, 4])
编辑:换句话说, a1
值对应于a2
'标签',我想生成对应于b2
的值。
假设要对a2
进行排序,这是使用np.searchsorted
的一个-
a1[np.searchsorted(a2,b2)]
样品运行-
In [145]: a1 = np.array([1,2,3,4])
...: a2 = np.array(list('abcd'))
...: b2 = np.array(list('aabbccdd'))
...:
In [146]: a1[np.searchsorted(a2,b2)]
Out[146]: array([1, 1, 2, 2, 3, 3, 4, 4])
对于a2
未排序的一般情况,我们需要引入sorter
参数-
In [148]: np.random.shuffle(a2)
In [149]: a2
Out[149]:
array(['b', 'd', 'c', 'a'],
dtype='|S1')
In [152]: sidx = a2.argsort()
In [155]: a1[sidx[np.searchsorted(a2,b2, sorter=sidx)]]
Out[155]: array([4, 4, 1, 1, 3, 3, 2, 2])
Numpys内置函数numpy.repeat
和numpy.tile
非常适合此类工作。
例:
import numpy as np
arr = np.array((1, 2, 3, 4))
print(arr)
[1, 2, 3, 4]
print(numpy.repeat(arr, 2))
[1, 1, 2, 2, 3, 3, 4, 4]
print(numpy.tile(arr, 2))
[1, 2, 3, 4, 1, 2, 3, 4]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.