拿取和选择有什么区别?

2024-04-23 14:35:35 发布

您现在位置:Python中文网/ 问答频道 /正文

似乎numpy.take(array, indices)numpy.choose(indices, array)返回相同的东西:由indices索引的array的子集。

这两者之间只有细微的区别,还是我遗漏了更重要的东西?有没有理由更喜欢其中一个?


Tags: numpyarray子集take理由区别chooseindices
2条回答

它们当然不是等价的,您可以通过给两个方法提供相同的参数(切换)看到:

>>> a = np.array([[1, 2, 3, 4], 
                  [5, 6, 7, 8], 
                  [9, 10, 11, 12], 
                  [13, 14, 15, 16]])
>>> np.choose([0, 2, 1, 3], a)
array([ 1, 10,  7, 16]) # one from each row
>>> np.take(a, [0, 2, 1, 3])
array([1, 3, 2, 4]) # all from same row

我建议您阅读关于^{}^{}的文档。

numpy.take(array, indices)numpy.choose(indices, array)在一维数组上的行为类似,但这只是巧合。正如jornsharpe所指出的,它们在高维阵列上的行为是不同的。

裸体

numpy.take(array, indices)array的扁平版本中挑选元素。(生成的元素当然不一定来自同一行。)

例如

numpy.take([[1, 2], [3, 4]], [0, 3])

回报

array([1, 4])

努比选择

numpy.choose(indices, set_of_arrays)从数组indices[0]中取出元素0,从数组indices[1]中取出元素1,从数组indices[2]中取出元素2,依此类推。(这里,array实际上是一组数组。)

例如

numpy.choose([0, 1, 0, 0], [[1, 2, 3, 4], [4, 5, 6, 7]])

回报

array([1, 5, 3, 4])

因为元素0来自数组0,元素1来自数组1,元素2来自数组0,元素3来自数组0。

更多信息

这些描述被简化了——完整的描述可以在这里找到:numpy.takenumpy.choose。例如,numpy.takenumpy.chooseindicesarray为一维时的行为类似,因为numpy.choose首先广播array

相关问题 更多 >