numpy的安装
- pip工具
- pip install numpy
- 安装anaconda
1、创建N维数组
1.1 np.array()
括号里面输入的是一个序列,可以是列表、元组、字符串等等,可以指定元素类型dtype。但是每一个元素的类型一定是相同的,因为它是一个多维同类数据容器。
1.1.1 使用np.array()创建数组
In [2]: import numpy as np
In [3]: np.array([[1,2,3],[4,5,6]])
Out[3]:
array([[1, 2, 3],
[4, 5, 6]])
In [5]: np.array(((1,2,3),(4,5,6)))
Out[5]:
array([[1, 2, 3],
[4, 5, 6]])
In [6]: np.array('1,2,3')
Out[6]: array('1,2,3', dtype='<U5')
注意:
如果行列不对称,那么生成的数组就变成了几个列表,并且只是一维的、数据类型是obj。
In [13]: arr=np.array([[1,2,3],[4,5]])
In [14]: arr
Out[14]: array([list([1, 2, 3]), list([4, 5])], dtype=object)
1.1.2 自定义dtype
上面都是没有指定数组的数据类型,根据元素的类型,自动设置dtype。也可以自己设置,例如:
#创建0-5的数组arr1,并指定其数据类型为"bool"
In [7]: arr1=np.array(range(6),dtype='bool')
In [8]: arr1
Out[8]: array([False, True, True, True, True, True])
数据类型在下面介绍。
1.2 np.asarray()
这个方法和上面的比较像,但是还是有一些差别。
#前者是把一个序列的值传入变成一个数组,是一种浅复制,有点类似list.copy。改变数组对象的内容,不会改变原来的序列。
list=[1,2,3,4]
ar1=np.array(list)
ar1[1]=0
print('数组1: ',ar1)
print('原来的列表:',list)
#而后者的话:
#(1)如果传入的不是一个数组,那么它的功能和前者是一样的。
ar2=np.array(list)
ar2[1]=0
print('数组2: ',ar2)
print('原来的列表',list)
#(2)如果传入的是一个数组,那它就是深复制了,复制的是地址,相当于指针指向了原来的数据,改变它会改变原对象。
ar=np.array([1,2,3,4])
ar3=np.asarray(ar)
ar3[1]=0
print('数组3变化: ',ar3)
print('原来的数组也发生变化',ar)
'''
output:
数组1: [1 0 3 4]
原来的列表: [1, 2, 3, 4]
数组2: [1 0 3 4]
原来的列表 [1, 2, 3, 4]
数组3变化: [1 0 3 4]
原来的数组也发生变化 [1 0 3 4]
'''
1.3 np.arange()
和python内置库中的range类似,不过这里直接生成的是一个数组。
In [9]: np.arange(10,step=2)
Out[9]: array([0, 2, 4, 6, 8])
1.4 np.zeros
根据给定形状生成全0矩阵。
In [69]: np.zeros((2,3,4))
Out[69]:
array([[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]],
[[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]]])
这里括号内传入的形状必须加括号,因为又很多参数,不加括号不能被识别。
1.5 array.ones()、array.empty()
和array.zeros()类似,不再赘述。
1.6 array.full()
不再是全1、全0、全空,可以自定义一个值。
In [73]: np.full((3,4),8)
Out[73]:
array([[8, 8, 8, 8],
[8, 8, 8, 8],
[8, 8, 8, 8]])
1.7 array.ones_like()
和array.ones()比较相似,但是传入的参数不是形状,而是一个数组。
#前者是创建一个全1的数组,输入的参数是shape
ones=np.ones((3,3))
print('ones:\n',ones)
#后者是创建一个和已知数组shape一样的一个全1数组,输入的参数是一个数组
ones_like=np.ones_like([[1,2],[2,3],[5,6]])#这里输入的是一个(3,2)的数组
print('ones_like:\n',ones_like)
'''
output:
ones:
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
ones_like:
[[1 1]
[1 1]
[1 1]]
'''
2、数组的数据类型
2.1 numpy中的数据类型(dtype)
类型 | 类型代码 | 描述 |
---|---|---|
int8,uint8 | i1,u1 | 有符号和无符号的8数位整数 |
int16,uint16 | i2,u2 | 有符号和无符号的16数位整数 |
int32,uint32 | i4,u4 | 有符号和无符号的32数位整数 |
int64,uint64 | i8,u8 | 有符号和无符号的64数位整数 |
float16 | f2 | 半精度浮点数 |
float32 | f4 | 标准单精度浮点数 |
float64 | f8 | 标准双精度浮点数 |
bool | ? | 布尔值,存储True或False |
string_ | S | ASCII字符串类型,eg:‘S10’ |
unicode_ | U | Unicode类型,eg:‘U10’ |
2.2 查看数组的数据类型
使用array.dtype属性来查看。
In [11]: arr=np.array('abcdefgh')
In [12]: arr.dtype
Out[12]: dtype('<U8')
2.3 修改数组的数据类型
使用array.astype(dtype)来修改。
In [15]: arr1=np.array([[1,2,3],[4,5,6]]