数据分析之numpy基础包

Posted 跟着哈哥学大智若愚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据分析之numpy基础包相关的知识,希望对你有一定的参考价值。

首先为啥要学numpy呢?空口无凭,看个小练习

假如有一个列表,里面有n个值,取出列表大于某个数的值

import numpy as np
import random

# 假如取出其中大于60的值
a = [random.randint(1, 100) for i in range(50)]
# print(a)

# 学python第一天
new_list = []
for i in a:
    if i > 60:
        new_list.append(i)
print(new_list)

# 学了匿名函数后
c = list(filter(lambda x: x > 60, a))
print(c)

# 学了numpy后
d = np.array(a)
print(d[d > 60])

[68, 69, 77, 69, 61, 77, 95, 96, 73, 88, 98, 74, 88, 98, 92, 63]
[68, 69, 77, 69, 61, 77, 95, 96, 73, 88, 98, 74, 88, 98, 92, 63]
[68 69 77 69 61 77 95 96 73 88 98 74 88 98 92 63]

显而易见,使用numpy之后要简单的多!即numpy将许多批量操作变得更简单,更高效!!!

一,安装环境

numpy属于python中的第三方库,需要在Windows的dos窗口或pycharm下面的Terminal中输入如下命令进行安装

pip install numpy

二,创建array

1,导入numpy包

import numpy as np
import random

2,创建array

a = [random.randint(10, 30) for i in range(10)]
b = np.array(a)  # 创建数组
print(b)
print(type(a), type(b)

[25 22 28 10 21 12 22 29 20 11]
<class 'list'> <class 'numpy.ndarray'>
a = np.array([1, 2, 3, 4, 5])
print(a)
b = np.array(range(10))
print(b)

[1 2 3 4 5]
[0 1 2 3 4 5 6 7 8 9]

3,创建多维数组

①创建二维数组

a = np.array([[1, 2, 3, 4], [6, 7, 8, 9]])
print(a)

[[1 2 3 4]
 [6 7 8 9]]
a = np.arange(5, 20).reshape((3, 5))
print(a)

[[ 5  6  7  8  9]
 [10 11 12 13 14]
 [15 16 17 18 19]]

②创建三维数组

a = np.array([[[1, 2, 3, 4], [6, 7, 8, 9]], [[2, 4, 5, 6], [3, 4, 5, 6]]])
print(a)

[[[1 2 3 4]
  [6 7 8 9]]

 [[2 4 5 6]
  [3 4 5 6]]]
a = np.arange(5, 17).reshape((2, 3, 2))
print(a)

[[[ 5  6]
  [ 7  8]
  [ 9 10]]

 [[11 12]
  [13 14]
  [15 16]]]

4,创建全0数组

print(np.array([0] * 10))
a = np.zeros(10)  # 默认是float
b = np.zeros(10, dtype=int)  # 转换为int
print(a)
print(b)

[0 0 0 0 0 0 0 0 0 0]
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[0 0 0 0 0 0 0 0 0 0]

5,创建全1数组

print(np.ones(10))  # 默认是小数

[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

6,创建空数组

print(np.empty(10))  # 创建空数组,以前内存中留下的值,没有意义

[6.23042070e-307 4.67296746e-307 1.69121096e-306 3.11523921e-307
 7.56599128e-307 1.37961913e-306 8.01097889e-307 1.78019082e-306
 1.78020984e-306 1.60218627e-306]

7,创建单位矩阵

print(np.eye(5))

[[1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0.]
 [0. 0. 1. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 0. 0. 1.]]

8, 其他一些

①求数组长度

b = np.array(range(20))
print(b.size)

20

print(np.linspace(1, 13, 10))  # 将1~13平均分为10份

[ 1.          2.33333333  3.66666667  5.          6.33333333  7.66666667
  9.         10.33333333 11.66666667 13.        ]

print(np.arange(10))  # 和range用法基本类似,唯一的区别是arange第三个参数可以用小数
print(np.arange(1, 10, 0.5))

[0 1 2 3 4 5 6 7 8 9]
[1.  1.5 2.  2.5 3.  3.5 4.  4.5 5.  5.5 6.  6.5 7.  7.5 8.  8.5 9.  9.5]

三,array的批量运算

1,

b = [random.randint(0, 100) for n in range(10)]
c = np.array(b)
print(c)
print(c + 1)
print(c / 3)

[72 50 91 95 35 63 66 65 53 15]
[73 51 92 96 36 64 67 66 54 16]
[24.         16.66666667 30.33333333 31.66666667 11.66666667 21.
 22.         21.66666667 17.66666667  5.        ]

2,

a = np.arange(10)
b = np.arange(5, 15)
print(a, b)
print(a + b)
print(b / a)
print(a > b)
print(a > 5)
print(a**0.5) 

[0 1 2 3 4 5 6 7 8 9] [ 5  6  7  8  9 10 11 12 13 14]
[ 5  7  9 11 13 15 17 19 21 23]
G:/untitled/data_habding/numpy_study/day1/study2.py:76: RuntimeWarning: divide by zero encountered in true_divide
  print(b / a)  # [       inf 6.         3.5        2.66666667 2.25       2.
[       inf 6.         3.5        2.66666667 2.25       2.
 1.83333333 1.71428571 1.625      1.55555556]  # inf(infinity即无穷) 比任何浮点数都大
[False False False False False False False False False False]
[False False False False False False  True  True  True  True]
[0.         1.         1.41421356 1.73205081 2.         2.23606798
 2.44948974 2.64575131 2.82842712 3.        ]

四,array的索引

1,

a = np.arange(5, 16)
print(a)  # [ 5  6  7  8  9 10 11 12 13 14 15]
print(a[0])  # 5

2,

a = np.arange(15).reshape((3, 5))  # 快速创建3行5列的二维数组
print(a)
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]]

print(a[0][0])  # 0  列表式写法
print(a[0, 0])  # 0  推荐(新式写法)
print(a[1, 2])  # 7

3,布尔索引

a = np.arange(5)
print(a)
b = a[[True, False, True, False, False]]
print(b)  # [0 2]

4,花式索引

a = np.arange(5, 20).reshape((3, 5))
print(a)
# [[ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]
print(a[0, a[0] > 6])  # [7 8 9]

print(a[[0, 2], :][:, [1, 3]])
# [[ 6  8]
#  [16 18]]

五,array的切片

1,

a = np.arange(5, 15)  # [ 5  6  7  8  9 10 11 12 13 14]
print(a[: 3])  # [5 6 7]
print(a[-5:])  # [10 11 12 13 14]

2,

a = np.arange(5, 20).reshape((3, 5))
# [[ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]
print(a[:, 1])  # [ 6 11 16]
print(a[: 2, 1: 3])
# [[ 6  7]
#  [11 12]]
print(a[1:, 3:])
# [[13 14]
#  [18 19]]

3,数组和列表的一个小区别

a = list(range(5, 15))
print(a)

b = np.arange(5, 15)
print(b)

c = a[: 5]
d = b[: 5]

c[0] = 20  # [5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
d[0] = 20  # [20  6  7  8  9 10 11 12 13 14]
print(a)
print(b)

总结:数组中修改其切片中的元素,数组中也会被修改,但是列表不会

六,numpy中通用函数

1,abs取绝对值

a = np.arange(-20, 5)
print(np.abs(a))

[20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0  1  2  3
  4]

2,sqrt开方

a = np.arange(-20, 5)
print(np.sqrt(a))

[       nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan        nan        nan        nan        nan
        nan        nan 0.         1.         1.41421356 1.73205081
 2.        ]

注:nan(即not a number)不是一个数 不等于任何浮点数(nan != nan)

3,round

①原python中

import math

print(round(3.4))  # 四舍五入取整  3

print(int(1.9))  # 直接扔掉小数位  1

print(math.floor(1.8))  # 向下取整  1
print(math.floor(-1.8))  # 向下取整  -2

print(math.ceil(1.1))  # 向上取整  2
print(math.ceil(-1.6))  # 向上取整  -1

②numpy中

a = np.arange(-5.5, 5)
print(a)
print(np.round(a))  # [-6. -4. -4. -2. -2. -0.  0.  2.  2.  4.  4.]
print(np.trunc(a))  # [-5. -4. -3. -2. -1. -0.  0.  1.  2.  3.  4.]
print(np.floor(a))  # [-6. -5. -4. -3. -2. -1.  0.  1.  2.  3.  4.]
print(np.ceil(a))  # [-5. -4. -3. -2. -1. -0.  1.  2.  3.  4.  5.]

a = np.linspace(1, 5, 10)
print(a)
print(np.round(a, 2))  # 取两位小数

[1.         1.44444444 1.88888889 2.33333333 2.77777778 3.22222222
 3.66666667 4.11111111 4.55555556 5.        ]
[1.   1.44 1.89 2.33 2.78 3.22 3.67 4.11 4.56 5.  ]

4,modf 剥离小数位和整数位

a = np.arange(-5.5, 5.5)
print(a)
print(np.modf(a))
# (array([-0.5, -0.5, -0.5, -0.5, -0.5, -0.5,  0.5,  0.5,  0.5,  0.5,  0.5]),
# array([-5., -4., -3., -2., -1., -0.,  0.,  1.,  2.,  3.,  4.]))

5,两个特殊的浮点数

①nan

# nan(nan即not a number)不是一个数 不等于任何浮点数(nan != nan)
print(float('nan'))  # nan

a = np.arange(以上是关于数据分析之numpy基础包的主要内容,如果未能解决你的问题,请参考以下文章

评论包邮送书了!!!深度学习基础之numpy,小白轻松入门numpy

ipython --之Numpy

学机器学习,不会数据分析怎么行?之NumPy详解

机器学习三剑客之numpy

Numpy 基础教程之Numpy的介绍

Numpy 基础教程之Numpy的介绍