- Numpy的一些属性
import numpy as np
array = np.array([[1,2,3],[4,5,6]]) # 创建二维数组
1.打印矩阵
print(array)
2.数组的维度
array.ndim
3.数组的形状
array.shape
4.数组的元素个数
array.size
- 如何创建数组/矩阵
1.指定数据类型dtype: int16/32/64, float16/32/64
a = np.array([1,2,3],dtype = np.int)
2.创建矩阵
a = np.array([[1,2,3],[4,5,6]]) # 2行三列矩阵
3.创建全0矩阵
a = np.zeros((3,4)) # 传递行列
- 创建一个空矩阵(不建议使用,几乎为0)
a = np.empty((3,4))
5.类似python的创建数列
a = np.arange(start,end,step)
* 使用reshape方法可以创建时修改维度
a = np.arange(12).reshape((3,4)) # 但要保证个数一致
6.生成从start到end的线段
a = np.linspace(start,end,num)[.reshape(rows,columns)] # num为段数
a = np.array([10,20,30,40])
b = np.arange(4)
1.基本运算
c = a*b
c = a**2
c = 10*np.sin(a) # 对a的每一个元素求sin值
2.逻辑判断
print(b < 3) # 若元素<3则在其位置上为True,否则为False
3.矩阵运算
a = np.array([[1,1],[0,1]])
b = arange(4).reshape((2,2))
c = a*b # 位置上的逐个相乘
c = np.dot(a,b) # 矩阵乘法
c = a.dot(b) # 不同表现形式
4.随机矩阵
a = np.random.random((rows,columns))
np.sum(a,axis), np.min(a), np.max(a) # 常用函数
* axis = 0表示从每一行中求值;axis = 1表示从每一列中求职
a = np.arange(2,14).reshape((3,4))
* 其中部分计算都可以指定axis轴方向 0 为行 1 为列
*
1.计算最小值的索引
np.argmin(a) # 索引从0开始
2.计算最大值的索引
np.argmax(a)
3.计算数组的平均值
np.average(a) == a.mean() == np.mean(a)\
4.计算数组的中位数
np.median(a)
5.数组累加
np.cumsum(a) # 第n个位置是前n-1个值的和
6.数组累差
np.diff(a) # 每一行前后两个位置上的差值
7.找出非零的数
np.nonzero(a) # 返回两个一维数组分别为元素的行数和列数
8.逐行进行排序
np.sort(a)
9.矩阵的转置
np.transpose(a) == a.T
e.g: (a.T).dot(a) # 矩阵的转置与矩阵相乘
10.clip功能:将大于指定大数的值全为该大数,小于指定小数的值全为该小数
np.clip(a)
11.矩阵的求逆
a = np.arange(16).reshape((4,4)
A = np.matrix(a)
A.I # A矩阵的求逆
* numpy中只有将数组声明为矩阵才能求逆,且逆矩阵必须n*n
a = np.arange(3,15).reshape((3,4))
# 输出第二行
print(a[2]) # 从0开始计数
print(a[2,:])
# 第二行第二列
print(a[2][2])
# 第一列
print(a[:,1])
# 第一行从第一到第二列
print(a[1,1:2]) # 类似python列表索引第二列取不到
# 循环打印行,默认打印行
for row in a;
print(row)
# 循环打印列
for column in a.T: # 将矩阵转置再打印
print(column)
# 通过迭代打印所有元素
for item in a.flat:
print(item)
* a.flat是返回一个数组的迭代器 a.flatten()返回a的一维数组
a = np.array([1,1,1])
b = np.array([2,2,2])
1.向下合并
c = np.vstack((a,b)) # vertical stack
# 结果是[[1,1,1],[2,2,2]] shape为2*3
2.左右合并
d = np.hstack((a,b)) # horizontal stack
# 结果是 [1,1,1,2,2,2] shape为6
3.将一维数列转换横向或竖向数列
a[:,np.newaxis] # shape为(3,1) 竖向
* a.T 不能将一维数列转置
* 横向添加维度 a[np.newaxis,:]
4.多数组合并,并指定方向
c = np.concatenate((a,b,b,a),axis = 0) # 指定为行的合并
a = np.arange(12).reshape((3,4))
1.纵向分割
b,c = np.split(a,2,axis=1) # 对矩阵a在列方向分成两部分
2.横向分割
b,c,d = np.split(a,3,axis = 0) # 对矩阵a在行方向上分成三部分
3.不等的分割
np.array_split(a,3,axis = 1) # 将4列分为3部分
a = np.arange(4)
b = a
c = a
d = b
1.a[0] = 11
当修改a时,b、c、d都会进行改变
2.取消关联仅仅赋值
b = a.copy() # deep copy