您的位置:首页 > 编程语言 > Python开发

numpy的argsort和sum和tile函数

2016-01-13 20:22 495 查看
在使用这几个函数时遇到一些问题记录一下,个人理解,不一定正确。

问题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]]]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  numpy tile argsort sum python