机器学习爱好者Numpynumpy模块

Numpy基础教程

2019-04-14  本文已影响5人  陨星落云
QQ截图20190411203536.png

arange与linspace区别:

arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。

linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。

In [8]: a=np.linspace(1,10,4)

In [9]: a
Out[9]: array([ 1.,  4.,  7., 10.])

In [10]: b=np.linspace(1,10,4,endpoint=False)

In [11]: b
Out[11]: array([1.  , 3.25, 5.5 , 7.75])

In [12]: c=np.concatenate((a,b))

In [13]: c
Out[13]: array([ 1.  ,  4.  ,  7.  , 10.  ,  1.  ,  3.25,  5.5 ,  7.75])
QQ截图20190411171917.png 图片1.png QQ截图20190411205639.png
In [26]: a=np.arange(24).reshape((2,3,4))

In [27]: np.square(a)
Out[27]:
array([[[  0,   1,   4,   9],
        [ 16,  25,  36,  49],
        [ 64,  81, 100, 121]],

       [[144, 169, 196, 225],
        [256, 289, 324, 361],
        [400, 441, 484, 529]]], dtype=int32)

In [28]: a=np.sqrt(a)

In [29]: a
Out[29]:
array([[[0.        , 1.        , 1.41421356, 1.73205081],
        [2.        , 2.23606798, 2.44948974, 2.64575131],
        [2.82842712, 3.        , 3.16227766, 3.31662479]],

       [[3.46410162, 3.60555128, 3.74165739, 3.87298335],
        [4.        , 4.12310563, 4.24264069, 4.35889894],
        [4.47213595, 4.58257569, 4.69041576, 4.79583152]]])

In [30]: np.modf(a)
Out[30]:
(array([[[0.        , 0.        , 0.41421356, 0.73205081],
         [0.        , 0.23606798, 0.44948974, 0.64575131],
         [0.82842712, 0.        , 0.16227766, 0.31662479]],

        [[0.46410162, 0.60555128, 0.74165739, 0.87298335],
         [0.        , 0.12310563, 0.24264069, 0.35889894],
         [0.47213595, 0.58257569, 0.69041576, 0.79583152]]]),
 array([[[0., 1., 1., 1.],
         [2., 2., 2., 2.],
         [2., 3., 3., 3.]],

        [[3., 3., 3., 3.],
         [4., 4., 4., 4.],
         [4., 4., 4., 4.]]]))

图片5.png
In [101]: file_path=r'C:\Users\Administrator\Desktop\测量计算\youtube_video_data\US_video_data_numbers.csv'

In [102]: t1 = np.loadtxt(file_path,delimiter=",",dtype="int",unpack=True)

In [103]: print(t1)
[[4394029 7860119 5845909 ...  142463 2162240  515000]
 [ 320053  185853  576597 ...    4231   41032   34727]
 [   5931   26679   39774 ...     148    1384     195]
 [  46245       0  170708 ...     279    4737    4722]]
 

In [107]: t2=np.loadtxt(file_path,delimiter=",",dtype="int",skiprows=1,unpack=0)

In [108]: print(t2)
[[7860119  185853   26679       0]
 [5845909  576597   39774  170708]
 [2642103   24975    4542   12829]
 ...
 [ 142463    4231     148     279]
 [2162240   41032    1384    4737]
 [ 515000   34727     195    4722]]

import numpy as np
a=np.arange(100).reshape(5,10,2)
np.save("a.npy",a)
b=np.load("a.npy")
print(b)


图片6.png

那么问题来了,在一组数据中单纯的把nan替换为0,合适么?会带来什么样的影响?

比如,全部替换为0后,替换之前的平均值。如果大于0,替换之后的均值肯定会变小,所以更一般的方式是把缺失的数值替换为均值(中值)或者是直接删除有缺失值的一行

那么问题来了:

​ 如何计算一组数据的中值或者是均值

​ 如何删除有缺失数据的那一行(列)[在pandas中介绍]

def fill_ndarray(t1):
    for i in range(t1.shape[1]):  #遍历每一列
        temp_col = t1[:,i]  #当前的一列
        nan_num = np.count_nonzero(temp_col!=temp_col)
        if nan_num !=0: #不为0,说明当前这一列中有nan
            temp_not_nan_col = temp_col[temp_col==temp_col] #当前一列不为nan的array

            # 选中当前为nan的位置,把值赋值为不为nan的均值
            temp_col[np.isnan(temp_col)] = temp_not_nan_col.mean()
    return t1

if __name__ == '__main__':
    t1 = np.arange(24).reshape((4, 6)).astype("float")
    t1[1, 2:] = np.nan
    print(t1)
    t1 = fill_ndarray(t1)
    print(t1)

结果如下:

[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. nan nan nan nan]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]
[[ 0.  1.  2.  3.  4.  5.]
 [ 6.  7. 12. 13. 14. 15.]
 [12. 13. 14. 15. 16. 17.]
 [18. 19. 20. 21. 22. 23.]]

​ 样本标准差公式:
\sigma=\sqrt{\frac{1}{N-1} \sum_{i=1}^{N}\left(x_{i}-\mu\right)^{2}}

In [23]: a=np.random.randint(0,20,(5))

In [24]: a
Out[24]: array([ 5, 18, 11, 10, 14])
#一侧值:(18-5)/1=13;两侧值:(11-5)/2=3
In [25]: np.gradient(a)
Out[25]: array([13. ,  3. , -4. ,  1.5,  4. ]) 

In [26]: c=np.random.randint(0,50,(3,5))

In [27]: c
Out[27]:
array([[ 4, 23, 23, 41, 49],
       [30, 32, 22, 13, 41],
       [ 9,  7, 22,  1,  0]])

In [28]: np.gradient(c)
Out[28]:
[array([[ 26. ,   9. ,  -1. , -28. ,  -8. ],
        [  2.5,  -8. ,  -0.5, -20. , -24.5], #最外层维度的梯度
        [-21. , -25. ,   0. , -12. , -41. ]]),
 array([[ 19. ,   9.5,   9. ,  13. ,   8. ],
        [  2. ,  -4. ,  -9.5,   9.5,  28. ], #第二层维度的梯度
        [ -2. ,   6.5,  -3. , -11. ,  -1. ]])]

#在0-1范围内随机取浮点数
In [10]: np.random.rand(3,4)
Out[10]:
array([[0.81290747, 0.59001749, 0.98388915, 0.5450704 ],
       [0.4436627 , 0.62666944, 0.65467164, 0.24130413],
       [0.11018308, 0.71224195, 0.51024083, 0.35018583]])
#标准正态分布
In [11]: np.random.randn(3,4)
Out[11]:
array([[-0.37706199,  1.4327175 , -0.61502341,  0.23868781],
       [-0.59052728, -1.70656216, -1.26575076,  0.79823001],
       [-0.78918198,  0.26395496,  0.96813851,  1.74659854]])
#上下限定范围随机取整数
In [12]: np.random.randint(10,20,(3,4))
Out[12]:
array([[14, 19, 13, 14],
       [14, 15, 10, 16],
       [11, 10, 17, 14]])
#上下限定范围随机取浮点数
In [13]: np.random.uniform(0,10,(3,4))
Out[13]:
array([[9.39514985, 4.4435068 , 8.51494792, 4.64526108],
       [0.4427993 , 0.49198364, 5.48385483, 2.44355702],
       [8.64128776, 7.19048908, 8.48646395, 6.11265874]])
#指定的正态分布
In [15]: np.random.normal(10,5,(3,4))
Out[15]:
array([[ 8.75188405,  5.21684615,  7.99871039,  9.90856039],
       [ 6.16204638,  8.55961468, 20.76441474,  6.97229357],
       [18.94705677, 12.52661497, 18.46105393,  8.74113972]])
#随机种子数
In [19]: np.random.seed(1)

In [20]:  np.random.randint(10,20,(3,4))
Out[20]:
array([[15, 18, 19, 15],
       [10, 10, 11, 17],
       [16, 19, 12, 14]])

In [21]: np.random.seed(1)

In [22]:  np.random.randint(10,20,(3,4))
Out[22]:
array([[15, 18, 19, 15],
       [10, 10, 11, 17],
       [16, 19, 12, 14]])

上一篇 下一篇

猜你喜欢

热点阅读