简介
通过可视化的方式来学习与理解Numpy中的简单概念。
文中图片出自A Visual Intro to NumPy and Data Representation
什么是Numpy?
Numpy是Python中用于数据分析、机器学习与科学计算的知名第三方库,它是Python中很多科学计算库的依赖包,如sickit-learn、SciPy、Pandas等
创建数组
Numpy中创建数组使用 np.array(list) 则可,本质其实就是将 list 转换成了 Numpy中定义的 numpy.ndarray类型,从而方便高效的进行各种矩阵运算。
In [1]: import numpy as np
In [2]: a = np.array([1,2,3])
In [3]: print(a) #数组的值
[1 2 3]
In [4]: a.dtype # 每个元素的类型
Out[4]: dtype('int64')
In [5]: a.shape #形状, 三行零列。
Out[5]: (3,)
In [6]: a.size #array的大小,其实就是array中所有元素的个数
Out[6]: 3
从代码中可以看出,我们创建了一个名为a的数组,它的形状为(3,),即三行零列,整体大小为3,形象如下图:
在通过list创建array时,如果没有指定dtype(数组元素类型), 那么就会以list中元素的类型而自动定义成对应的默认类型,如果list中全为整型,则dtype默认为int64,如果list中存在浮点型,则dtype默认为float64,当然这是可以修改的,如下:
In [7]: np.array([1,2,3]).dtype
Out[7]: dtype('int64') # list中全为整型,则dtype默认为int64
In [8]: np.array([1.0,2,3]).dtype
Out[8]: dtype('float64') # list中存在浮点型,则dtype默认为float64
In [9]: np.array([1,2,3], dtype=np.float32).dtype
Out[9]: dtype('float32') # dtype可以修改
实际使用Numpy时,通常会直接通过Numpy生成数组的初始值,而不是我们通过list去生成,Numpy为此提供了ones()、zeros()、random.random()等方法。
In [10]: n1 = np.ones(3)
In [11]: print(n1)
[1. 1. 1.]
In [12]: n1.dtype
Out[12]: dtype('float64')
In [13]: n2 = np.zeros(3)
In [14]: print(n2)
[0. 0. 0.]
In [15]: n3 = np.random.random(3)
In [16]: print(n3)
[0.95151279 0.79374927 0.52983953]
从代码可以看出,ones()方法会将数组元素全初始化为1.,zeros()与random.random()方法也都类似,需注意,这3个方法生成的数组类型都为float64,形象如下图:
数组运算
创建两个数组,将他们相加,获得一个新的数组。
In [20]: data = np.array([1,2])
In [21]: ones = np.ones(2)
In [22]: data + ones
Out[22]: array([2., 3.])
可以发现,我们不用使用for迭代的方式去运算数组结构,直接通过+
操作符就完事了,抽象做的非常好,如下图:
与加法类似,减法、乘法、除法如下:
加减乘除法除了数组之间可以使用,数组与单纯的数字也可以计算
In [23]: data
Out[23]: array([1, 2])
In [24]: data + 1
Out[24]