#点乘
import numpy as np
a = np.arange(12).reshape(3,4) #0-11,#一共12个数,分成了三行四列的二维矩阵
b = np.arange(10,14,1).reshape(4,1) #10-13,以1为间隔分成4行一列的二维矩阵
print(a.dot(b)) #点乘,就是数学中的矩阵乘法,前行乘以后列
print(np.exp(a)) #矩阵所有的值取e的多少次幂
print(np.sqrt(a)) #a的所有的数取均方
c = a.ravel()
print(c) #[ 0 1 2 3 4 5 6 7 8 9 10 11] 把矩阵拉成了向量
print(a.shape) #(3, 4) 如果shape后面没括号就是查看矩阵行和列
c.shape = (6,2) #把拉长的c向量重新变成6×2的矩阵
#[ 0 1 2 3 4 5 6 7 8 9 10 11]一维数组,它们都带一对方括号的,所以shape只显示一个数,对于这种仅含一对方括号的数组而言,
#不可以做转置,那怎么办
#第一种方法
d = np.array([[1,2,3]])
print(np.shape(d)) (1, 3)
print(np.shape(c)) #(12,)
print(d.T) 列向量转置成行向量
[[1]
[2]
[3]]
#第二种方法 列向量转置成行向量
c.shape = (-1,1) #-1的意思是,如果要reshape成一列多行,你又不想去计算有多少个元素时,numpy会自动的根据数据和列数给你填充
print(c)
print(c.T)
np.hstack() #横着拼接,增加属性值
np.vstack() #竖着拼接,增加样本
a = np.floor(10 * np.random.random((2,12)))
print(a)
print("------------------")
print(np.hsplit(a,3)) #平均切三份,横着切,按照行切
print(np.hsplit(a,(3,4))) #在第四个索引那里切,然后在第五个索引那里切
print(np.vsplit(a,3))
#-----------------------------复制操作-----------------------------------------------#
c = a.view() #复制操作,浅复制,有不同的内存地址,但是共用相同的值;
c = a 这个就相当于cpp的指针了,或者叫做引用;a指向的这个值的引用计数一开始是1,后来被c引用了加1
d = a.copy() 深拷贝。引用和数据都是不同,递归的赋值a中的值。
#----------------------------排序或者索引的应用----------------------------------------#
#找矩阵每列的最大值
index = data.argmax(axis=0)
data[index, range(np.shape[1])]
np.tile(a,(1,2)) #行变成1倍,列变成2倍
#-------------------排序-------------------------------
a = np.array([[1,2,3],[7,8,9]])
print(np.sort(a,axis=1)) #按行排序
e = np.argsort(a) #输出的是索引