Arrays 通过字符串在另一个数组中的索引表示字符串矩阵
我想使用numpy通过Arrays 通过字符串在另一个数组中的索引表示字符串矩阵,arrays,numpy,matrix,Arrays,Numpy,Matrix,我想使用numpy通过节点中的索引来表示边中的字符串 nodes = np.array('A B C D E'.split()) edges = np.array([['A', 'B'], ['A', 'C'], ['B', 'C'], ['B', 'E'], ['D', 'E']]) 所需输出 np.array([[0, 1],
节点中的索引来表示边中的字符串
nodes = np.array('A B C D E'.split())
edges = np.array([['A', 'B'],
['A', 'C'],
['B', 'C'],
['B', 'E'],
['D', 'E']])
所需输出
np.array([[0, 1],
[0, 2],
[1, 2],
[1, 4],
[3, 4]])
明显的非优化方法是创建一个dict
,并用您可以使用的dict
的值替换字符串-
样本运行-
In [17]: nodes
Out[17]:
array(['A', 'B', 'C', 'D', 'E'],
dtype='|S1')
In [18]: edges
Out[18]:
array([['A', 'B'],
['A', 'C'],
['B', 'C'],
['B', 'E'],
['D', 'E']],
dtype='|S1')
In [19]: np.searchsorted(nodes,edges)
Out[19]:
array([[0, 1],
[0, 2],
[1, 2],
[1, 4],
[3, 4]])
In [44]: nodes
Out[44]:
array(['E', 'D', 'C', 'B', 'A'],
dtype='|S1')
In [45]: edges
Out[45]:
array([['A', 'B'],
['A', 'C'],
['B', 'C'],
['B', 'E'],
['D', 'E']],
dtype='|S1')
In [46]: sidx = nodes.argsort()
In [47]: sidx[np.searchsorted(nodes,edges,sorter=sidx)]
Out[47]:
array([[4, 3],
[4, 2],
[3, 2],
[3, 0],
[1, 0]])
如果节点
未排序,我们需要使用sorter
参数,如示例运行的修改版本所示-
In [17]: nodes
Out[17]:
array(['A', 'B', 'C', 'D', 'E'],
dtype='|S1')
In [18]: edges
Out[18]:
array([['A', 'B'],
['A', 'C'],
['B', 'C'],
['B', 'E'],
['D', 'E']],
dtype='|S1')
In [19]: np.searchsorted(nodes,edges)
Out[19]:
array([[0, 1],
[0, 2],
[1, 2],
[1, 4],
[3, 4]])
In [44]: nodes
Out[44]:
array(['E', 'D', 'C', 'B', 'A'],
dtype='|S1')
In [45]: edges
Out[45]:
array([['A', 'B'],
['A', 'C'],
['B', 'C'],
['B', 'E'],
['D', 'E']],
dtype='|S1')
In [46]: sidx = nodes.argsort()
In [47]: sidx[np.searchsorted(nodes,edges,sorter=sidx)]
Out[47]:
array([[4, 3],
[4, 2],
[3, 2],
[3, 0],
[1, 0]])