Numpy基础(一)

Numpy是python用于进行可科学计算,尤其是数据分析时,所用到的一个基础库。它是大量Python数学和科学计算包的基础,比如pandas库就用到了Numpy。

安装

国际安装惯例

pip install numpy

numpy的心脏:ndarray

Numpy最重要的一个特点就是其N维数组对象(即ndarray);其实说是 N维的矩阵更好理解 。它是一种由同质元素组成的多维数组,元素数量是事先指定好的。同质指的是几乎所有元素的类型和大小都相同。事实上,数据类型由另一个叫做dtype(data-type)的Numpy对象来指定;每个ndarray只有一种dtype。

定义ndarray最简单的方法是使用array()函数,以python列表作为参数,列表的元素即是ndarray的元素

In [1]:import numpy as np
        a = np.array([1.5,2.5,3.5,4.5])
        a
Out[1]:
array([1.5, 2.5, 3.5, 4.5])

基本属性

数组的维度和元素数量由数组的型(shape)来确定,数组的型由N个正整数组成的元组来指定,元组的每个元素随影每一维的大小。
上面的概念看上去有点难理解,看些例子好懂一点

属性 说明
shape 数组的型
ndim 数组的维度
size 数组的长度
In [1]: b = np.array([[1,2,3],[4,5,6]])
        b
Out[1]:
array([[1, 2, 3],
       [4, 5, 6]])
In [2]:print('ndin: ',b.ndim)
       print('shape: ',b.shape)
       print('size: ',b.size)
Out[2]:
ndin:  2
shape:  (2, 3)
size:  6

创建数组

数组的创建有几种方式,最常用的就是使用array()函数,参数为单层或嵌套列表

In [1]:b = np.array([[1,2,3],[4,5,6]])
       b
Out[1]:
array([[1, 2, 3],
       [4, 5, 6]])

除了列表,array()还可以嵌套接收嵌套元组或元组列表作为参数

In [1]:c = np.array(((1,2,3),(4,5,6)))
       c
Out[1]:
array([[1, 2, 3],
       [4, 5, 6]])

此外,参数可以是由元组或列表组成的列表,其效果相同

In [1]:d = np.array([(1,2,3),(4,5,6)])
       d
Out[1]:
array([[1, 2, 3],
       [4, 5, 6]])

数据类型

到目前为止,只是使用过简单的整型和浮点型数据类型,其实Numpy还包含多种数据类型

数据类型 说明
int8,uint8 有符号和无符号的8位(1个字节)整型
int16,uint16 16位(2个字节)
int32,uint32 32位(4个字节)
int64,uint64 64位(8个字节)
float16 半精度浮点数
float32 单精度
float64 双精度
float128 拓展精度浮点数
complex64 用64位浮点数表示的复数
complex128 128位
complex256 256位
bool 布尔类型

dtype选项

可以通过dtype查看数组的数据类型

In [1]:d.dtype
Out[1]:
dtype('int32')

还可以在创建数组的时候,定义数据类型

In [1]:f = np.array([(1,2,3),(4,5,6)],dtype=np.complex)
print(f)
print(f.dtype)

Out[1]:
[[1.+0.j 2.+0.j 3.+0.j]
 [4.+0.j 5.+0.j 6.+0.j]]
complex128

自带的数组创建方法

Numpy库中有几个函数能够生成包含初始值得N维数组,数组元素因函数而异。有了这些函数,仅用一行代码就可以生成大量的数据。
比如:zeros和ones分别可以生成指定长度或形状的全0或全1数组。empty可以生成一个没有任何具体值的数组,通常称这些值为“垃圾值”。
要用这些方法创建多维度数组,只需传入一个表示形状的元组即可。例如:

In [2]: np.zeros((3,3))
Out[2]:
array([[0., 0., 0.],
       [0., 0., 0.],
       [0., 0., 0.]])

In [3]: np.ones((3,3))
Out[3]:
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])

In [4]: np.empty((2,3,2))
Out[4]:
array([[[0.00000000e+000, 6.36598737e-314],
        [0.00000000e+000, 1.27319747e-313],
        [1.27319747e-313, 1.27319747e-313]],

       [[1.27319747e-313, 1.27319747e-313],
        [0.00000000e+000, 4.44659081e-323],
        [2.54639495e-313, 6.42285340e-323]]])

此外,还有arange、linspace和random函数可以用于创建数组。arange与python中range函数有点类似,但也有不同之处,

In [1]: import numpy as np

In [2]: np.arange(0,12,3)
Out[2]: array([0, 3, 6, 9])

#arange的第三个参数可以是浮点数,range则不行

In [3]: np.arange(0,6,0.5)
Out[3]: array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. , 5.5])

#使用reshape函数,指定形状,将一维数组拆分成不同的部分

In [4]: np.arange(0,6,0.5).reshape(2,6)
Out[4]:
array([[0. , 0.5, 1. , 1.5, 2. , 2.5],
       [3. , 3.5, 4. , 4.5, 5. , 5.5]])

linspace与arange非常相似。它的钱两个参数同样是用来指定序列的起始和结尾,但第三个参数不在表示两个相邻数字之间的距离,而是用来指定将有开头到结尾的范围分成几部分

In [5]: np.linspace(0,12,3)
Out[5]: array([ 0.,  6., 12.])

random函数是使用随机数填充数组,每次生成的元素都会不同。若要生成多维数组,只需要把数组的大小作为参数传递给它

In [6]: np.random.random(3)
Out[6]: array([0.19724655, 0.75376209, 0.16554352])

In [7]: np.random.random((3,3))
Out[7]:
array([[0.97249775, 0.23825222, 0.87127446],
       [0.49011329, 0.25698634, 0.02129674],
       [0.08015451, 0.37356949, 0.9233434 ]])

猜你喜欢

转载自blog.csdn.net/stormdony/article/details/81359158
今日推荐