一 简介

Numpy是高性能科学计算和数据分析的基础包。它也是pandas等其他数据分析的工具的基础,基本所有的数据分析的包都用过它。Numpy为python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组。它将常用的数学函数都支持向量化运算,使得这些数学函数能够直接对数组进行操作,将本来需要在python级别进行的循环,放到C语言的运算中,明显地提高了程序的运算速度。

二 安装

安装

pip install numpy

使用

import numpy as np

简单的例子

# 都是运行在jupyter notebook 上

import
numpy as np def squares(values): result = [] for v in values: result.append(v*v) return result to_square = range(10000) %timeit squares(to_square)

>>>
5.71 ms ± 133 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
array_to_square = np.arange(0, 10000)

%timeit array_to_square**2

>>>
42.9 µs ± 6.17 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

 

三 ndarray-多维数组对象

numpy的核心特征就是N-维数组对------ndarray 的特点

  • 连续内存分配
  • 向量化操作
  • 布尔选择
  • 分片

ndarray基础

  • ndarray.ndim 数组轴的个数,在python的世界中,轴的个数被称为秩(zhi)
  • ndarray.shape数组的维度。这是一个指示数组在每个维度上大小的整数元组。例如一个n排m列的矩阵,他的shape属性将是(2,3)这个元组的长度显然是秩,即维度或者ndim属性
  • ndarray.size数组元素的总个数,等于shape属性中元组元素的乘积
  • ndarray.dtype一个用来描述数组中元素类型的对象,可以通过创造或指定dtype使用标准python类型。另外Numpy提供它自己的数据类型
  • ndarray.itemsize数组中的每个元素的字节大小,例如一个元素类型为float64的数组itemsize属性值为8(=64/8),又如一个元素类型为complex32的数组item属性为4(=32/8)
  • ndarray.data包含实际数组元素的缓冲区,通常我们不需要使用这个属性,因为我们总是通过索引来使用数组中的元素

numpy_编程语言

 

 numpy_编程_02

 创建ndarray对象

np.array()

numpy_编程_03

 

 

1、arange():
np.arange(1.2,10,0.4)
执行结果:
array([1.2, 1.6, 2. , 2.4, 2.8, 3.2, 3.6, 4. , 4.4, 4.8, 5.2, 5.6, 6. ,
       6.4, 6.8, 7.2, 7.6, 8. , 8.4, 8.8, 9.2, 9.6])
# 在进行数据分析的时候通常我们遇到小数的机会远远大于遇到整数的机会,这个方法与Python内置的range的使用方法一样
-----------------------------------------------------------------
2、linspace()
np.linspace(1,10,20)
执行结果:
array([ 1.        ,  1.47368421,  1.94736842,  2.42105263,  2.89473684,
        3.36842105,  3.84210526,  4.31578947,  4.78947368,  5.26315789,
        5.73684211,  6.21052632,  6.68421053,  7.15789474,  7.63157895,
        8.10526316,  8.57894737,  9.05263158,  9.52631579, 10.        ])
# 这个方法与arange有一些区别,arange是顾头不顾尾,而这个方法是顾头又顾尾,
在1到10之间生成的二十个数每个数字之间的距离相等的,前后两个数做减法肯定相等
---------------------------------------------------------------- 3、zeros() np.zeros((3,4)) 执行结果: array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) # 会用0生成三行四列的一个多维数组 --------------------------------------------------------------------- 4、ones() np.ones((3,4)) 执行结果: array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) # 会用1生成三行四列的一个多维数组 ------------------------------------------------------------------------ 5、empty() np.empty(10) 执行结果: array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) # 这个方法只申请内存,不给它赋值 ----------------------------------------------------------------------- 6、eye() np.eye(5) 执行结果: array([[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.]])

索引和切片

  • 索引
# 将一维数组变成二维数组
arr = np.arange(30).reshape(5,6) # 后面的参数6可以改为-1,相当于占位符,系统可以自动帮忙算几列
arr

# 将二维变一维
arr.reshape(30)

# 索引使用方法
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
现在有这样一组数据,需求:找到20
列表写法:arr[3][2]
数组写法:arr[3,2]  # 中间通过逗号隔开就可以了
  • 切片
arr数组
array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17],
       [18, 19, 20, 21, 22, 23],
       [24, 25, 26, 27, 28, 29]])
arr[1:4,1:4]   # 切片方式   前面的1:4是从第一行开始到第四行;后面的1:4就是从第一列开始到第四列
执行结果:
array([[ 7,  8,  9],
       [13, 14, 15],
       [19, 20, 21]])

向量运算

数组和数字之间的运算

li1 = [
    [1,2,3],
    [4,5,6]
] 
a = np.array(li1)
a * 2
运行结果:
array([[ 2,  4,  6],
       [ 8, 10, 12]])
       

同样大小数组之间的运算

# l2数组
l2 = [
    [1,2,3],
    [4,5,6]
]
a = np.array(l2)

# l3数组
l3 = [
    [7,8,9],
    [10,11,12]
]
b = np.array(l3)

a + b  # 计算

执行结果:
array([[ 8, 10, 12],
       [14, 16, 18]])

布尔值

arr = np.arange(30).reshape(5,6)
arr
arr > 5
array([[False, False, False, False, False, False],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True],
       [ True,  True,  True,  True,  True,  True]])

# 布尔值索引:将同样大小的布尔数组传进索引,会返回一个有True对应位置的元素的数组

通用函数

能对数组中所有元素同时进行运算的函数就是通用函数。

常见的通用函数:能够接受一个数组的叫一元函数,接受两个数组的叫二元函数,结果返回的也是一个数组

numpy_编程_04

 

 numpy_编程_05

 

 numpy_编程语言_06

 

 numpy_编程_07

 

 numpy_编程语言_08

 注意

axis=0是x轴

axis=1是y轴