numpy基础知识(二)

数组转置和轴对换

In [4]: arr = np.random.randn(3,2)

In [5]: arr.T
Out[5]: 
array([[-1.61958612,  0.51404498,  1.27702971],
       [-1.49568441, -0.62306175,  0.27173435]])

In [6]: np.dot(arr.T,arr)
Out[6]: 
array([[4.5181063 , 2.44912079],
       [2.44912079, 2.69911737]])

dot说明

In [7]: arr = np.arange(16).reshape((2,2,4))

In [8]: arr
Out[8]: 
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7]],

       [[ 8,  9, 10, 11],
        [12, 13, 14, 15]]])

In [9]: arr.transpose((1,0,2))
Out[9]: 
array([[[ 0,  1,  2,  3],
        [ 8,  9, 10, 11]],

       [[ 4,  5,  6,  7],
        [12, 13, 14, 15]]])

transpose需要得到有一个有轴编号组成的元组才能对这些轴进行转置

In [10]: arr.swapaxes(1,2)
Out[10]: 
array([[[ 0,  4],
        [ 1,  5],
        [ 2,  6],
        [ 3,  7]],

       [[ 8, 12],
        [ 9, 13],
        [10, 14],
        [11, 15]]])

通用函数

In [11]: arr = np.arange(10)

In [12]: arr
Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [13]: np.sqrt(arr)
Out[13]: 
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])

In [14]: np.exp(arr)
Out[14]: 
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])

还有许多函数,大家可以去官网查看

利用数组进行数据处理

In [16]: point
Out[16]: array([1, 2, 3, 4])

In [17]: xs,ys = np.meshgrid(point,point)

In [18]: xs
Out[18]: 
array([[1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4],
       [1, 2, 3, 4]])

In [19]: ys
Out[19]: 
array([[1, 1, 1, 1],
       [2, 2, 2, 2],
       [3, 3, 3, 3],
       [4, 4, 4, 4]])
In [20]: z = np.sqrt(xs**2+ys**2)

In [21]: z
Out[21]: 
array([[1.41421356, 2.23606798, 3.16227766, 4.12310563],
       [2.23606798, 2.82842712, 3.60555128, 4.47213595],
       [3.16227766, 3.60555128, 4.24264069, 5.        ],
       [4.12310563, 4.47213595, 5.        , 5.65685425]])

条件逻辑表述数组计算

In [23]: xarr = np.array([1.1,1.2,1.3,1.4,1.5])

In [24]: yarr = np.array([2.1,2.2,2.3,2.4,2.5])

In [25]: cond = np.array([True,False,True,True,False])

In [26]: result = [(x if c else y) for x,y,c in zip (xarr,yarr,cond)]

In [27]: result
Out[27]: [1.1, 2.2, 1.3, 1.4, 2.5]
In [28]: result = np.where(cond,xarr,yarr)

In [29]: result
Out[29]: array([1.1, 2.2, 1.3, 1.4, 2.5])

numpy.where 可以用 x if condition esle y,这种方式处理的速度不是很快;无法用于多维数组。np.where比较简洁;np.where的条件是与,或,非逻辑计算

猜你喜欢

转载自my.oschina.net/u/238361/blog/1801879