安装
在终端键入pip install numpy
可以进行安装,若超时失败,可使用国内镜像
安装成功后在程序中import numpy as np
即可使用
Ndarray对象
Ndarray对象是用来存放同类型元素的多维数组。Ndarray中的每个元素在内存中都有相同存储大小的区域。
创建Ndarray对象
通过调用Numpy的array函数来创建Ndarray对象
array = np.array([[1,2,3],
[4,5,6]])
完整参数的函数如下:
np.array(object,dtype=None,copy = True,order = None,subok = False,ndmin=0
参数解释:
- object:数组或者嵌套的数列
- dtype:数组元素的数据类型,可选
- copy:对象是否需要复制,可选
- order:创建数组的样式,C为行方向,F为列方向,A为任意方向,可选
- subok:默认返回一个与基类类型相同的数组,可选
- ndmin:指定数组的最小维度,可选
如下:
dtype参数指定数据类型
# 指定数据类型
array = np.array([[1,2,3],
[4,5,6]],dtype=int)
print(array.dtype)
生成全为0的矩阵
# 生成一个三行四列的全零矩阵
zero_array = np.zeros((3,4))
生成全为1的矩阵
zero_array = np.ones((3,4))
print(zero_array)
生成范围内的连续/步长数组
zero_array = np.arange(0,11,2)
若想要改为2行3列的矩阵,可以使用reshape函数
zero_array = np.arange(0,11,2).reshape((2,3))
从已有ndarray对象中创建
asarray(object,dtype,order)
将列表、元组等转换为ndarray
x = [1,2,3,4,5,6]
array = np.asarray(x)
array.shape = (2,3)
print(array)
frombuffer(buffer,dtype,count=-1,offset=0)
用于实现动态数组。接收buffer输入参数,以流的形式读入转化成ndarray对象
参数解释:
- buffer:可以是任意对象,会以流的形式读入
- dtype:可选
- count:读取的数据数量,默认为-1,读取所有数据
- 读取的起始位置,默认为0
s = b'Hello Numpy'
a = np.frombuffer(s,dtype= 'S1')
print(a)
fromiter(iterable,dtype,count=-1)
从可迭代对象中建立ndarray对象,返回一维数组
dtype参数是必写的
list = [1,2,3,4,5,6]
it = iter(list)
a = np.fromiter(it,dtype=int)
a.shape = (2,3)
print(a)
从数值范围创建数组
。。。(写不动了)
随机生成
a = np.random.random((2,3))
print(a)
第一个random是模块名,第二个random是函数名
Ndarray对象的属性
ndim 维度、秩
array = np.array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=int)
print(array.ndim)
array1 = np.array([[[1,2],[3,4],
[5,6],[7,8]]])
print(array1.ndim)
shape
如二维的矩阵shape就是行数和列数
array = np.array([[1,2,3],
[4,5,6],
[7,8,9]],dtype=int)
print(array.shape)
array1 = np.array([[[1,2],[3,4],
[5,6],[7,8]]])
print(array1.shape)
修改矩阵的shape:
可以直接赋值修改,也可以使用reshape
array1 = np.array([[[1,2],[3,4],
[5,6],[7,8]]])
array1.shape = (2,4)
print(array1)
array2 = array1.reshape(4,2)
print(array2)
itemsize
以字节的形式返回每一个元素的大小
x = np.array([[1,2],
[3,4]],dtype=np.int8)
y = np.array([[1,2],
[3,4]],dtype=np.int64)
print(x.itemsize)
print(y.itemsize)
flags
返回Ndarray对象的内存信息,包含以下信息:
- C_CONTIGUOUS:数据是在一个单一的C风格的连续段中
- F_CONTIGUOUS:数据是在一个单一的Fortran风格的连续段中
- OWNDATA:数组拥有它索世勇的内存或从另一个对象中借用
- WRITEABLE:数据区域可以被写入,将该值设置为False,则数据只读
- ALIGNED:数据和所有元素都适当地对齐到硬件上
- UPDATEIFCOPY:这个数组是其他数组的一个副本,当这个数组被释放时,原数组的内容将被更新
print(x.flags)
基础运算
加减法
对应位置元素相加减
a = np.array([10,20,30,40])
b = np.arange(4) #[0,1,2,3]
print(a+b)
print(a-b)
也可以使用函数add()和subtract()
print(np.add(a,b))
print(np.subtract(a,b))
乘除
此处的乘法为逐个相乘,而非矩阵乘法。
除法中除数不能为0,所以修改了b的数据
a = np.array([10,20,30,40])
b = np.arange(1,5) #[1,2,3,4]
# 乘法
print(np.multiply(a,b))
print(a*b)
# 除法
print(np.divide(a,b))
print(a/b)
矩阵乘
矩阵乘法需要使用函数dot()进行计算
x = np.array([[1,1],
[0,1]])
y = np.arange(4).reshape((2,2))
print(x*y)
print(np.dot(x,y)) # 写法一
print(x.dot(y)) # 写法二
幂次方
使用双星号来表示幂方的运算,或者使用函数power()
print(b**2)
print(np.power(b,2))
取倒数 reciprocal()
a = np.array([10,20,30,40],dtype=float)
print(np.reciprocal(a))
取模 mod()
print(np.mod(a,4))
最值、元素和
元素和是矩阵中所有元素的和,最值是在一个矩阵中的元素进行比较的最大值和最小值
a = np.array([[1,100,5],
[-1,-100,-5]])
print(np.sum(a)) # 元素和
print(np.max(a)) #元素最大值
print(np.min(a)) # 元素最小值
还可以通过参数axis指定维度,求在某个维度的最值和元素和。
axis = 1在行数,axis = 0在列数
a = np.array([[1,100,5],
[-1,-100,-5]])
print(np.sum(a,axis=1)) # 元素和
print(np.max(a,axis=1)) #元素最大值
print(np.min(a,axis=1)) # 元素最小值
print('------------------------')
print(np.sum(a,axis=0)) # 元素和
print(np.max(a,axis=0)) #元素最大值
print(np.min(a,axis=0)) # 元素最小值