根据标签扩展numpy数组

时间:2017-05-23 18:22:50

标签: python arrays numpy

如果我有

<div style="display: inline; background-color: rgb(255, 179, 0);" class="gwt-TreeItem gwt-TreeItem-selected" role="treeitem" id="gwt-uid-102" aria-level="9" aria-setsize="4" aria-posinset="1" aria-selected="true">

我如何到达应该

的b1
a1 = np.array([1,2,3,4])
a2 = np.array(list('abcd'))
b2 = np.array(list('aabcccdd'))

编辑:换句话说,array([1, 1, 2, 3, 3, 3, 4, 4]) 值对应a1'代码',我想生成与a2对应的值。

2 个答案:

答案 0 :(得分:1)

假设要对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])

答案 1 :(得分:1)

Numpys内置函数numpy.repeatnumpy.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]