rd1*_*d11 16 python arrays numpy
它似乎numpy.take(array, indices)和numpy.choose(indices, array)返回相同的东西:array索引的子集indices.
两者之间是否只有微妙的差异,或者我错过了一些更重要的东西?是否有理由偏爱另一个?
rd1*_*d11 24
numpy.take(array, indices)并且numpy.choose(indices, array)在1-D阵列上表现相似,但这只是巧合.正如jonrsharpe所指出的,它们在高维数组上表现不同.
numpy.take(array, indices)挑选出扁平版本的元素array.(结果元素当然不一定来自同一行.)
例如,
numpy.take([[1, 2], [3, 4]], [0, 3])
Run Code Online (Sandbox Code Playgroud)
回报
array([1, 4])
Run Code Online (Sandbox Code Playgroud)
numpy.choose(indices, set_of_arrays)从数组中取出元素0,从数组中取出元素indices[0]1,从数组中取出元素indices[1]2 indices[2],依此类推.(这里,array实际上是一组数组.)
例如
numpy.choose([0, 1, 0, 0], [[1, 2, 3, 4], [4, 5, 6, 7]])
Run Code Online (Sandbox Code Playgroud)
回报
array([1, 5, 3, 4])
Run Code Online (Sandbox Code Playgroud)
因为元素0来自数组0,元素1来自数组1,元素2来自数组0,元素3来自数组0.
这些描述是简化的 - 完整描述可以在这里找到:numpy.take,numpy.choose.例如,numpy.take和numpy.choose行为类似时indices和array是1- d因为numpy.choose第一广播array.
它们肯定不是等价的,正如你可以看到通过给两个方法提供相同的参数(切换):
>>> 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
Run Code Online (Sandbox Code Playgroud)