给出一个清单L = [0,1,2,3,4,5,6,7,8,9]
。访问/提取元素的索引由numpy数组给出的最佳方法是什么?让nArr=np.array([0,-1,2,6])
。
结果输出应为另一个列表P = [0,9,2,6]
。
显然,当元素的形状一致时,我们可以将其简单地转换为另一个numpy数组,但是如果不是这样呢?例如,M = [np.random.rand(5,5), np.random.rand(1)]
。
Stock Python具有一个便利类,即itemgetter
:
In [27]: from operator import itemgetter
In [28]: L = [0,1,2,3,4,5,6,7,8,9]
In [29]: nArr=np.array([0,-1,2,6])
In [30]: itemgetter(*nArr)
Out[30]: operator.itemgetter(0, -1, 2, 6)
In [31]: itemgetter(*nArr)(L)
Out[31]: (0, 9, 2, 6)
在内部它等效于列表理解:
In [33]: [L[x] for x in nArr]
Out[33]: [0, 9, 2, 6]
因此,这不是像数组索引那样的快速操作(请看其代码)。sort
当您想定义一个key
获取多个值的函数时,它可能是最有用的一种执行方式或其他操作。
https://stackoverflow.com/a/47585659/901925
制作一个随机的嵌套列表:
In [54]: arr = np.random.randint(0,10,(4,4))
In [55]: L = arr.tolist()
In [56]: L
Out[56]: [[9, 5, 8, 4], [1, 5, 5, 8], [8, 0, 5, 8], [1, 4, 5, 1]]
词汇按“列”排序:
In [57]: sorted(L)
Out[57]: [[1, 4, 5, 1], [1, 5, 5, 8], [8, 0, 5, 8], [9, 5, 8, 4]]
词汇按“列” 2和1排序(按此顺序):
In [59]: sorted(L, key=itemgetter(2,1))
Out[59]: [[8, 0, 5, 8], [1, 4, 5, 1], [1, 5, 5, 8], [9, 5, 8, 4]]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句