import numpy as np #1 a=np.array([1,2,3]) # 创建数组 print("a:{}\ntype(a):{}\na.dtype:{}\na.ndim:{}\na.size:{}\na.shape:{}\na.itemsize:{}\n"\ .format(a,type(a),a.dtype,a.ndim,a.size,a.shape,a.itemsize)) # 类型、数据类型、轴数量、数组长度、数组的型 b=np.array([[1.3,2.4],[0.3,4.1]]) print("b:{}\ntype(b):{}\nb.dtype:{}\nb.ndim:{}\nb.size:{}\nb.shape:{}\nb.itemsize:{}\n"\ .format(b, type(b), b.dtype, b.ndim, b.size, b.shape,b.itemsize)) # 类型、数据类型、轴数量、数组长度、数组的型 print("np.arange(0,6,0.8):{}\n".format(np.arange(0,6,.8))) # 创建0-6之间以0.8为步长的数组 print("np.linspace(0,10,5):{}\n".format(np.linspace(0,10,5,dtype=complex))) # 创建0-10之间含五个元素的数组,数据类型为复数 print("np.arange(0,12).reshape(3,4):\n{}\n".format(np.arange(0,12).reshape(3,4))) # 创建矩阵 print("np.random.random((3,3)):\n{}\n".format(np.random.random((3,3)))) # 创建随机数矩阵 # 基本操作 d=np.arange(4) e=np.arange(4,8) print("d=np.arange(4)\ne=np.arange(4,8)\nd:{}\nd+4:{}\nd*2:{}".format(d,d+4,d*2)) # 数组元素自加、减、乘 print("d+e:{}\nd-e:{}\nd*e:{}".format(d+e,d-e,d*e)) # 数组元素相加、减、乘 print("d*np.sin(e):{}\nd*np.sqrt(e):{}\n".format(d*np.sin(e),d*np.sqrt(e))) # 数组元素数学函数 A=np.arange(0,9).reshape(3,3) B=np.ones((3,3)) # 创建单位矩阵 print("A=np.arange(0,9).reshape(3,3)\nB=np.ones((3,3))\nA:\n{}\nB:\n{}\nA*B:\n{}\n\ np.dot(A,B):\n{}\nA.dot(B):\n{}\nnp.dot(B,A):\n{}\n"\ .format(A,B,A*B,np.dot(A,B),A.dot(B),np.dot(B,A))) # 矩阵、矩阵乘
import numpy as np #2 A=np.ones((3,3)) # 创建单位矩阵 B=np.zeros((3,3)) # 创建0矩阵 C=np.vstack((A,B)) # 增加行的方式连接A,B D=np.hstack((A,B)) # 增加列的方式连接A,B print("C:\n{}\nD:\n{}\n".format(C,D)) a=np.array([0,1,2]) # 创建数组 b=np.array([3,4,5]) c=np.array([6,7,8]) d=np.row_stack((a,b,c)) # 按行合并数组为矩阵 e=np.column_stack((a,b,c)) # 按列合并数组为矩阵 print("d:\n{}\ne:\n{}\n".format(d,e)) E=np.arange(16).reshape((4,4)) # 生成矩阵 [F,G]=np.vsplit(E,2) # 按行等分矩阵 [H,J]=np.hsplit(E,2) # 按列等分矩阵 print("E:\n{}\nF:\n{}\nG:\n{}\nH:\n{}\nJ:\n{}\n".format(E,F,G,H,J)) np.split(E,[1,3],axis=1)
np.split(E.[1,3],axis=0)
import numpy as np #3
A=np.arange(10,19).reshape((3,3))
print("A:\n{}\nA[0:2,0:2]:\n{}\nA[[0,2],0:2]:\n{}\n".format(A,A[0:2,0:2],A[[0,2],0:2])) # 切片操作
for item in A.flat: # 遍历每个元素
print(item)
B=np.apply_along_axis(np.mean,axis=0,arr=A) # 按列对A中的元素聚合
C=np.apply_along_axis(np.mean,axis=1,arr=A) # 按行对A中的元素聚合
print("\nB:\n{}\nC:\n{}\n".format(B,C))
D=np.random.random((4,4))
print("D:\n{}\n".format(D)) print("D<0.5:\n{}\nD[D<0.5]:\n{}\n".format(D<0.5,D[D<0.5])) # 按条件选取元素
E=np.random.random(12)
F=E.reshape(3,4)
print("\nE:{}\nF:\n{}\nF.transpose():\n{}\nF.ravel():\n{}\nF:\n{}\n"\
.format(E,E.reshape(3,4),F.transpose(),F.ravel(),F)) # 重定义、转置、降为一维
import numpy as np #4
a=np.array([1,2,3,4])
b=a.copy() # 得到a的副本 (注意:数据赋值,切片得到的是调用,指向原对象,用copy()函数才能得到副本;而Python列表切片得到的是副本)
m=np.arange(6)reshape(3,1,2)
n=np.arange(6)reshape(3,2,1)
print("m+n:{}".format(m+n)) # 相加前会先使用广播机制补齐元素
strc=np.array([],dtype=("b1,i4,u1,f2,c8")) # 结构化数组
strc["u1"] # 选取数据类型为u1的数据
strc.dtype.names=('name1','name2','name3','name4','name5') # 为各数据类型指定新名称
np.save("文件名",数组名) # 将数据按二进制形式存储进文件
np.load("文件名.npy") # 读取文件
np.genfromtxt("文件名.txt",delimiter=",",names=True) # 读取文件,delimiter指定分隔符,names用于指定是否包含列标题
import numpy as np #5
arr=arr.astype(np.int32) # 将数组的元素数据类型转换为int32
n_str= np.array(['1.2','2.3','3.2141'], dtype=np.string_)
n_str=n_str.astype(float) # 将数组的string元素转换为float (此处写的是float 而不是np.float64, 会将python类型映射到等价的dtype上)