在使用这几个函数时遇到一些问题记录一下,个人理解,不一定正确。
问题1: argsort的函数返回值是什么?
比如有语句:
In [40]: distances
Out[40]: array([ 1.48660687, 1.41421356, 0. , 0.1 ])
In [41]: distances.argsort()
Out[41]: array([2, 3, 1, 0])
很奇怪,进行了排序为什么出现的不是排序后的值,help后发现,argsort其实是返回array排序后的下标(或索引)。
比如上面数组排序后结果应该是:[0. , 0.1 , 1.41421356, 1.48660687].
此时0.的位置在排序后第0位,而0.在原array中是第2位,0.1的在排序后在第1位,在原array中是第3位,依次类推。
因为函数返回的排序后元素在原array中的下标,所以返回了2,3, 1, 0.
问题2: sum函数的axis值代表了什么?
axis决定了sum函数作用的轴值(维度)。
当axis为None时,返回array中所有元素的和。如:
In [40]: np.sum([[1,2], [2, 3], [4,5]])
Out[40]: 17
当axis为0时,返回array中所有单元所对应值的和的数组(或值)。如:
In [41]: np.sum([[0, 1, 3], [3, 5, 8], [4, 5, 6]], axis=0)
Out[41]: array([ 7, 11, 17])
In [42]: np.sum([1, 2, 3,4 ,6], axis=0)
Out[42]: 16
当axis为1时,返回array中所有单元内部值的和的数组。如:
In [33]: np.sum([[0, 1], [3, 5], [2, 5]], axis=1)
Out[33]: array([1, 8, 7])
问题3:tile函数作用是什么?
函数原型是:
tile(A, reps)
Construct an array by repeating A the number of times given by reps.
然而我看了很久的help依然不太懂,借助例子可以稍微理解一些。当reps为单个值时,返回A中元素*reps倍数的array。如:
In [47]: tile([1, 2], 2)
Out[47]: array([1, 2, 1, 2])
解释:2让[1, 2]中元素重复2次,变成[1, 2, 1, 2]
In [48]: tile([1, 2], 1)
Out[48]: array([1, 2])
当reps为二元元组(a, b)或者list时,元组中第二个值b是让整个A中所有元素单元变成b倍,第一个值a让元素变成b倍的A变成a个维度。还是看例子吧:
In [70]: tile([1, 2, 3], (1, 1))
Out[70]: array([[1, 2, 3]])
In [67]: tile([1, 2, 3], (1, 2))
Out[67]: array([[1, 2, 3, 1, 2, 3]])
In [69]: tile([1, 2, 3], (3, 2))
Out[69]:
array([[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]])
解释:2让[1, 2, 3]变成[1, 2, 3, 1, 2, 3],3让[1, 2, 3, 1, 2, 3]变成最终的结果。
当reps为更高元元组或list时,元组的最后一个值i让整个A中的元素单元变成i倍,设处理后的结果为B,其倒数第二个值j让B中元素单元变成j倍,成C,前面值依次处理上一次处理后的结果,一直到第一个值,最后得到结果。如:
In [83]: tile([1, 2, 3], (4, 3, 2))
Out[83]:
array([[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]]])
解释:
2让元素元组[1, 2, 3]变成
[1, 2, 3, 1, 2, 3],
3让[1, 2, 3, 1, 2, 3]变成
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
3让
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
变成:
[[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]],
[[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3],
[1, 2, 3, 1, 2, 3]]]