科学计算系列学习 01:Numpy
科学计算系列学习 02:Pandas
科学计算系列学习 03:Matplotlib
介绍:Numeric Python,它是一个由多维数组对象和用于处理数组的例程集合组成的库。
import numpy as np
# 定义矩阵
a = np.array([1,2,3],dtype=np.int) # 一维矩阵,设置为整数方式存在,也可以:dtype=np.float
b = np.zeros((3,4),dtype=np.float) #
c = np.ones((3,4),dtype=np.float)
d = np.arange(12).reshape((3,4)) # 定义一个三行四列,共12个值的矩阵
e = np.linspace(1,10,8).reshape(2,4)
print(a,'\n',b,'\n',c,'\n',d,'\n',e)
# 矩阵的属性
array = np.array([[1,2,3],[4,5,6]]) # 二维矩阵/数组
print(array)
print('number of dimmension:',array.ndim) # array.ndim 几维矩阵
print('shape',array.shape) # array.shape 矩阵几行几列
print('size',array.size) # array.size 矩阵几个元素
# 基础运算 1
# 逐个相加减乘除
a = np.array([10, 20, 30, 40])
b = np.arange(4)
print(a, b)
c1 = a - b
c2 = a + b
c3 = a*b
print(c1, c2, c3)
# 比较运算,返回布尔值列表
print(b<3)
print(b==3)
# 矩阵相乘
aa = np.array([1,1]
[0,1])
bb = np.arange(4).reshape(2,2)
# 逐个相乘
cc1 = aa*bb
# 矩阵相乘
cc3 = np.dot(aa, bb)
cc4 =aa.dot(b)
# 矩阵求和,最值
d = np.random.rand((2, 4)) # 两行四列的矩阵,值为随机生成的0-1之间
print(d)
print(np.sum(a, axis=1)) # axis=0代表行,=1代表列
print(np.min(a, axis=0))
print(np.max(a, axis=1))
print(np.average(d))
# 基础运算 2
# 找出索引
e = np.arange(2, 14).reshape((3, 4))
print(e)
print(np.argmin(e))
print(np.argmax(e))
# 索引找值
A = np.arange(3,15).reshape(3,4)
print(A)
print(A[2], [1])
print(A[2, 1])
print(A[2, :])
print(A[2, 1:3])
# 迭代每一行
for row in A:
print(row)
# 迭代每一列
for column in A.T:
print(column)
# 迭代所有
print(A.flatten())
# flat:迭代索引返回一个迭代器
for item in A.flat:
print(item)
# 合并
A = np.array([1, 1, 1]) # 三行
B = np.array([2, 2, 2]) # 三行
C = np.vstack((A, B)) # 两行三列 vertical stak 上下合并
print(C)
print(A.shape, C.shape)
D = np.hstack((A, B)) #
print(D)
print(D.shape)
# 行变列
A1 = np.array([1, 1, 1])[:, np.newaxis]
B1 = np.array([2, 2, 2])[:, np.newaxis]
C1 = np.hstack((A1, B1))
print(A1.shape, C1.shape)
# 分割
A = np.arange(12).reshape((3, 4))
print(A)
print(np.split(A, 3, axis=0)) # 分成几块,横向还是竖向分
print(np.vsplit(A, 3)) # 横向分割三块,同上
print(np.split(A, 4, axis=1))
print(np.hsplit(A, 2)) # 竖向分割两块,同上
print(np.array_split(A, 3, axis=1)) # 不平均分割,一个两列,两个一列
# 浅复制 & 深复制
a = np.arange(4)
b = a
c = a
print(a)
c[1] = 88 # 修改c之后,a也会跟着改变,这就是浅复制,理解为链接复制
print(a)
d = a.copy() #加.copy()是深复制,更改d不会同时改变a
d[3] = 33
print(a, d)