2024-04-23 14:35:35 发布
网友
似乎numpy.take(array, indices)和numpy.choose(indices, array)返回相同的东西:由indices索引的array的子集。
numpy.take(array, indices)
numpy.choose(indices, array)
indices
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
我建议您阅读关于^{}和^{}的文档。
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(indices, set_of_arrays)
indices[0]
indices[1]
indices[2]
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.take,numpy.choose。例如,numpy.take和numpy.choose在indices和array为一维时的行为类似,因为numpy.choose首先广播array。
numpy.take
numpy.choose
它们当然不是等价的,您可以通过给两个方法提供相同的参数(切换)看到:
我建议您阅读关于^{} 和^{} 的文档。
numpy.take(array, indices)
和numpy.choose(indices, array)
在一维数组上的行为类似,但这只是巧合。正如jornsharpe所指出的,它们在高维阵列上的行为是不同的。裸体
numpy.take(array, indices)
从array
的扁平版本中挑选元素。(生成的元素当然不一定来自同一行。)例如
回报
努比选择
numpy.choose(indices, set_of_arrays)
从数组indices[0]
中取出元素0,从数组indices[1]
中取出元素1,从数组indices[2]
中取出元素2,依此类推。(这里,array
实际上是一组数组。)例如
回报
因为元素0来自数组0,元素1来自数组1,元素2来自数组0,元素3来自数组0。
更多信息
这些描述被简化了——完整的描述可以在这里找到:numpy.take,numpy.choose。例如,
numpy.take
和numpy.choose
在indices
和array
为一维时的行为类似,因为numpy.choose
首先广播array
。相关问题 更多 >
编程相关推荐