numpy的argsort和sum和tile函数

在使用这几个函数时遇到一些问题记录一下,个人理解,不一定正确。


问题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]]]

你可能感兴趣的:(python,SUM,numpy,tile,argsort)