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)  #輸出的是索引

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章