人工智能numpy科学计算库02
1、矩阵数据类型转换
import numpy as np
b5 = numpy.array(['1','2','3'])
b5 = b5.astype(float) # 把str类型转换为float类型
2、矩阵取值操作
import numpy as np
b5 = numpy.array([1,2,3,4])
print(b5.min()) # 获取b5中的最小值
print(np.arange(15)) # 产生一个0到14的数组,np是取的numpy别名
b6 = np.arange(15).reshape(3,5) # 将一维数组分割成三行五列的2维数组。reshape(3,-1),-1的意思是自动计算多少列
print(b6)
print(b6.dtype.name) # 打印b6的类型
print(b6.ndim) # 打印b6的维度
print(b6.size) # 打印b6里元素的个数
b7 = np.zeros((2,3,4),dtype=np.int32) # 初始化一个值为0的三维int32类型矩阵,zeros改成ones就是值为1的,后面如果没有dtype=np.int32,默认是flaot类型的
b8 = np.arange(10,30,5) # 产生从10开始,30结束,每5个值一加的数组
b9 = np.random.random((2,3)) # 产生一个2行3列的随机值矩阵
b10 = np.linspace(0,20,10) # 在0到20之间平均产生10个值
3、矩阵的计算、拆分、拼接
import numpy as np
#矩阵的计算
c1= np.arange(4)
c1= c1-1
c11 = c1**2
print(c11)
print(c11<1)
c2=np.array([[1,2],
[3,4]])
c3=np.array([[10,20],
[30,40]])
print(c2*c3) # 里面的值一一对应相乘
print(c2.dot(c3)) # 另一种写法numpy.dot(c2,c3)
# 数学里的矩阵相乘:一个行乘以一个列 1*10+2*30 1*20+2*40
# 3*10+4*30 3*20+4*40
print(np.exp([1,2]))
# exp:高等数学里以自然常数e为底的指数函数
# numpy.exp():返回e的幂次方,e是一个常数为2.71828
print(np.sqrt([1,2,3]))
# sqrt:开根号
print(np.floor(10*np.random.random((3,4))))
# floor 向下取整
print(c3.ravel()) # ravel()把矩阵变成向量
print(c3.T) # 行列转置
print(np.hstack((c2,c3))) # hstack横向拼接矩阵,vstack纵向拼接
print(np.hsplit(c2,2)) # hsplit横向拆分矩阵,vsplit纵向拆分
print(np.hsplit(c2,(1,2))) # 把第二个数到第三个数之间横向切
4、矩阵的深浅拷贝
python中变量和值存在不同的空间里,由变量的内存地址指向值的 内存地址
代码 | 解释 |
---|---|
a=b | a、b 指向 同一内存地址、同一‘值’内存地址 |
c= a.view() | 浅拷贝,a、c 不在同一内存空间 、但是同一‘值’内存地址 |
d= a.copy() | 深拷贝,a、d 不在同一内存空间、不同‘值’内存地址 |
import numpy as np
aa = np.arange(12)
print('没有赋值的时候',aa,id(aa))
bb = aa
bb.shape = 2,6 #把bb变成2行6列的矩阵,aa里的值也跟着变了
print('1、bb改变时',aa,id(aa))
print(bb,id(bb))
cc = aa.view()
cc.shape = 3,4 #把cc变成3行4列的矩阵,aa没有变成3行4列的矩阵
cc[0,2] = 123 #给cc里该值的时候,对应aa里也改变了
print('2、cc改变时:',aa,id(aa))
print(cc,id(cc))
dd = aa.copy()
dd.shape = 4,3
print('3、dd改变时:',aa,id(aa))
print(dd,id(dd))
5、矩阵索引、扩展、排序
np.sin(a)
np.sin(a)对矩阵a中每个元素取正弦
argmax
argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值
np.tile()
np.tile(c5,(2,3)) # 行2倍扩展,列3倍扩展
np.sort()
np.sort(c6,axis=1) #按照从小到大排序
import numpy as np
# np.sin(a) 对矩阵a中每个元素取正弦
# argmax返回的是最大数的索引.argmax有一个参数axis,默认是0,表示第几维的最大值
c4=np.sin(np.arange(20)).reshape(5,4)
print(c4)
c4_1=c4.argmax(axis=0) #比较c4[0][i]、c4[1][i]、c4[2][i]、c4[3][i]大小,然后取索引
print(c4_1)
c4_2 = c4[c4_1,range(c4.shape[1])]
# print(c4.shape[1]) # c4为4列
# print(range(c4.shape[1])) # range(4),产生0、1、2、3
print(c4_2)
print(c4[[1,2,3,0],[0,1,2,3]]) # [c4[1,0] c4[2,1] c4[3,2] c4[0,3]]
# 矩阵扩展
c5=[0,1,2,3]
c5_1=np.tile(c5,(2,3)) # 行2倍扩展,列3倍扩展
print(c5_1)
# 矩阵排序
c6=([4,3,5],[1,2,1])
c6_1=np.sort(c6,axis=1) #按照从小到大排序
c6_2=np.argsort(c6) #从小到大取索引