numpy基本操作

#点乘
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)  #输出的是索引

猜你喜欢

转载自blog.csdn.net/gaoyishu91/article/details/80177983