numpy科學(xué)計算包的使用1

Numpy是Python的一個科學(xué)計算的庫股冗,提供了矩陣運算的功能夺鲜,其一般與Scipy、matplotlib一起使用姚建。其實矫俺,list已經(jīng)提供了類似于矩陣的表示形式,不過numpy為我們提供了更多的函數(shù)。

numpy下載

numpy創(chuàng)建數(shù)組

數(shù)組創(chuàng)建函數(shù)

另外還有l(wèi)inspace函數(shù)厘托,可以在范圍內(nèi)創(chuàng)建數(shù)組,randn和rand也可以生成數(shù)組友雳。具體看下面代碼

import numpy as np

print('使用zeros/empty/ones')
print(np.zeros(10))# 生成包含10個0的一維數(shù)組
print(np.zeros((3, 6)))# 生成3*6的二維數(shù)組
print(np.empty((2, 3, 2)))# 生成2*3*2的三維數(shù)組,所有元素未初始化
print(np.ones_like(np.arange(6).reshape(2,3)))#生成兩行三列形狀的用1填充的數(shù)組
#array和asarray都可以將結(jié)構(gòu)數(shù)據(jù)轉(zhuǎn)化為ndarray
# 但是主要區(qū)別就是當(dāng)數(shù)據(jù)源是ndarray時铅匹,array仍然會copy出一個副本押赊,占用新的內(nèi)存,但asarray不會
#在這個例子中array和asarray沒有區(qū)別包斑,都對元數(shù)據(jù)進行了復(fù)制
data1=[[1,1,1],[1,1,1],[1,1,1]]
arr2=np.array(data1)
arr3=np.asarray(data1)
data1[1][1]=2
print('data1:\n',data1)
print('arr2:\n',arr2)
print('arr3:\n',arr3)
arr1=np.ones((3,3))
arr2=np.array(arr1)
arr3=np.asarray(arr1)
arr1[1]=2
print('arr1:\n',arr1)
print('arr2:\n',arr2)
print('arr3:\n',arr3)
#np.identity只能創(chuàng)建方形矩陣
#np.eye可以創(chuàng)建矩形矩陣流礁,且k值可以調(diào)節(jié),為1的對角線的位置偏離度舰始,0居中崇棠,1向上偏離1,2偏離2丸卷,以此類推枕稀,-1向下偏離
#numpy.eye(N,M=None, k=0, dtype=<type 'float'>)
#第一個參數(shù):輸出方陣(行數(shù)=列數(shù))的規(guī)模,即行數(shù)或列數(shù)
#第三個參數(shù):默認(rèn)情況下輸出的是對角線全“1”谜嫉,其余全“0”的方陣萎坷,如果k為正整數(shù),則在右上方第k條對角線全“1”其余全“0”沐兰,k為負(fù)整數(shù)則在左下方第k條對角線全“1”其余全“0”哆档。
print(np.identity(3))
print(np.eye(3))
print(np.eye(3,k=1))
#補充numpy.linspace方法,例如住闯,在從1到3中產(chǎn)生9個數(shù):
print(np.linspace(1,3,9).reshape(3,3))
#numpy中有一些常用的用來產(chǎn)生隨機數(shù)的函數(shù)瓜浸,randn()和rand()就屬于這其中。 
#numpy.random.randn(d0, d1, …, dn)是從標(biāo)準(zhǔn)正態(tài)分布中返回一個或多個樣本值比原。 
#numpy.random.rand(d0, d1, …, dn)的隨機樣本位于[0, 1)中
arr1 = np.random.randn(2,4)#2行4列數(shù)組
print(arr1)
print('******************************************************************')
arr2 = np.random.rand(2,4)
print(arr2)

numpy數(shù)據(jù)類型

數(shù)據(jù)類型1

數(shù)據(jù)類型2

數(shù)據(jù)類型的操作

  • 創(chuàng)建ndarray時指定dtype類型
  • 使用astype顯示轉(zhuǎn)換類型
print('生成數(shù)組時指定數(shù)據(jù)類型')
arr = np.array([1, 2, 3], dtype = np.float64)
print(arr)
print(arr.dtype)
arr = np.array([1, 2, 3], dtype = np.int32)
print(arr)
print(arr.dtype)

print('使用astype復(fù)制數(shù)組并轉(zhuǎn)換數(shù)據(jù)類型')
int_arr = np.array([1, 2, 3, 4, 5])
float_arr = int_arr.astype(np.float)
print(int_arr.dtype)
print(float_arr.dtype)

print('使用astype將float轉(zhuǎn)換為int時小數(shù)部分被舍棄')
float_arr = np.array([3.7, -1.2, -2.6, 0.5, 12.9, 10.1])
int_arr = float_arr.astype(dtype = np.int)
print(int_arr)

print('使用astype把字符串轉(zhuǎn)換為數(shù)組插佛,如果失敗拋出異常。')
str_arr = np.array(['1.25', '-9.6', '42'], dtype = np.string_)
float_arr = str_arr.astype(dtype = np.float)
print(float_arr)

print('astype使用其它數(shù)組的數(shù)據(jù)類型作為參數(shù)')
int_arr = np.arange(10)
float_arr = np.array([.23, 0.270, .357, 0.44, 0.5], dtype = np.float64)
print(int_arr.astype(float_arr.dtype))
print(int_arr[0], int_arr[1])  # astype做了復(fù)制量窘,數(shù)組本身不變雇寇。

NumPy的ndarray 數(shù)組和標(biāo)量之間的運算

不用編寫循環(huán)即可對數(shù)據(jù)執(zhí)行批量運算
大小相等的數(shù)組之間的任何算術(shù)運算都會將運算應(yīng)用到元素級
數(shù)組與標(biāo)量的算術(shù)運算也會將那個標(biāo)量值傳播到各個元素

# 數(shù)組乘法/減法,對應(yīng)元素相乘/相減蚌铜。
arr = np.array([[1.0, 2.0, 3.0], [4., 5., 6.]])
print(arr * arr)
print(arr - arr)
print

# 標(biāo)量操作作用在數(shù)組的每個元素上
arr = np.array([[1.0, 2.0, 3.0], [4., 5., 6.]])
print(1 / arr)
print(arr ** 0.5)  # 開根號

NumPy的ndarray 基本的索引和切片

  • 數(shù)組切片
a = np.array([2, 0, 1, 5, 8, 3])
#類似于列表的切片
print(a[:-2])#[2 0 1 5]
print(a[-2:])#[8 3]
print(a[:1])#[2]
print(a[::-1])#反轉(zhuǎn)[3 8 5 1 0 2]
print(a[0:-1:2])#[2 1 8]
print('使用切片訪問和操作數(shù)組')
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(arr[1:6])  # 打印元素arr[1]到arr[5]
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[:2]) # 打印第1锨侯、2行
print(arr[:2, 1:]) # 打印第1、2行冬殃,第2囚痴、3列
print(arr[:, :1])  # 打印第一列的所有元素
arr[:2, 1:] = 0 # 第1、2行审葬,第2深滚、3列的元素設(shè)置為0
print(arr)
  • 通過索引操作
# 通過索引訪問二維數(shù)組某一行或某個元素
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr[2])
print(arr[0][2])
print(arr[0, 2]) # 普通Python數(shù)組不能用骂束。
print

# 對更高維數(shù)組的訪問和操作
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr[0])  # 結(jié)果是個2維數(shù)組
print(arr[1, 0]) # 結(jié)果是個2維數(shù)組
old_values = arr[0].copy()  # 復(fù)制arr[0]的值
arr[0] = 42 # 把arr[0]所有的元素都設(shè)置為同一個值
print(arr)
arr[0] = old_values # 把原來的數(shù)組寫回去
print(arr)
  • ndarray 布爾型索引、
import numpy as np
import numpy.random as np_random

print('使用布爾數(shù)組作為索引')
name_arr = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
rnd_arr = np_random.randn(7, 4) # 隨機7*4數(shù)組
print(rnd_arr)
print(name_arr == 'Bob') # 返回布爾數(shù)組成箫,元素等于'Bob'為True展箱,否則False。
print(rnd_arr[name_arr == 'Bob'])  # 利用布爾數(shù)組選擇行,顯示第一行和第四行
print(rnd_arr[name_arr == 'Bob', :2])  # 在上一個的基礎(chǔ)上增加限制打印列的范圍
print(rnd_arr[-(name_arr == 'Bob')]) # 對布爾數(shù)組的內(nèi)容取反蹬昌,布爾數(shù)組選擇行反轉(zhuǎn)
mask_arr = (name_arr == 'Bob') | (name_arr == 'Will') # 邏輯運算混合結(jié)果
print(rnd_arr[mask_arr])
rnd_arr[name_arr != 'Joe'] = 7  # 先布爾數(shù)組選擇行混驰,然后把每行的元素設(shè)置為7。
print(rnd_arr)
  • ndarray 花式索引
print('Fancy Indexing: 使用整數(shù)數(shù)組作為索引')
arr = np.empty((8, 4))
for i in range(8):
    arr[i] = i
print(arr)
print(arr[[4, 3, 0, 6]]) # 打印arr[4]皂贩、arr[3]栖榨、arr[0]和arr[6]。
print(arr[[-3, -5, -7]]) # 打印arr[5]明刷、arr[3]和arr[1]行
arr = np.arange(32).reshape((8, 4))  # 通過reshape變換成二維數(shù)組
print(arr)
print(arr[[1, 5, 7, 2], [0, 3, 1, 2]]) # 打印arr[1, 0]婴栽、arr[5, 3],arr[7, 1]和arr[2, 2]
print(arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]])  # 1572行的0312列
print(arr[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])]) # 可讀性更好的寫法

NumPy的ndarray 數(shù)組轉(zhuǎn)置和軸對換

import numpy as np
import numpy.random as np_random

print('轉(zhuǎn)置矩陣')
arr = np.arange(15).reshape((3, 5))
print(arr)
print(arr.T)
print

print('轉(zhuǎn)置矩陣做點積')
arr = np_random.randn(6, 3)
print(arr)
print(np.dot(arr.T, arr))
print

print('高維矩陣轉(zhuǎn)換')
arr = np.arange(16).reshape((2, 2, 4))
print(arr)
'''
詳細(xì)解釋:
arr數(shù)組的內(nèi)容為
- a[0][0] = [0, 1, 2, 3]
- a[0][1] = [4, 5, 6, 7]
- a[1][0] = [8, 9, 10, 11]
- a[1][1] = [12, 13, 14, 15]
transpose的參數(shù)為坐標(biāo)辈末,正常順序為(0, 1, 2, ... , n - 1)愚争,
現(xiàn)在傳入的為(1, 0, 2)代表a[x][y][z] = a[y][x][z],第0個和第1個坐標(biāo)互換挤聘。
- a'[0][0] = a[0][0] = [0, 1, 2, 3]
- a'[0][1] = a[1][0] = [8, 9, 10, 11]
- a'[1][0] = a[0][1] = [4, 5, 6, 7]
- a'[1][1] = a[1][1] = [12, 13, 14, 15]
'''
print(arr.transpose((1, 0, 2)))
print(arr.swapaxes(1, 2))  # 直接交換第1和第2個坐標(biāo)

NumPy的ndarray 快速的元素級數(shù)組函數(shù)

  • 一元函數(shù) I
一元函數(shù)1
  • 一元函數(shù) II
一元函數(shù)2
  • 二元函數(shù) I
二元函數(shù)1
  • 二元函數(shù) II
二元函數(shù)2
import numpy as np
import numpy.random as np_random

print('求平方根')
arr = np.arange(10)
print(np.sqrt(arr))

print('數(shù)組比較')
x = np_random.randn(8)
y = np_random.randn(8)
print(x)
print(y)
#取兩個舉證相同位置的最大值
print(np.maximum(x, y))

print('使用modf函數(shù)把浮點數(shù)分解成整數(shù)和小數(shù)部分')
arr = np_random.randn(7) * 5  # 統(tǒng)一乘5
print(np.modf(arr))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末轰枝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子组去,更是在濱河造成了極大的恐慌鞍陨,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件从隆,死亡現(xiàn)場離奇詭異诚撵,居然都是意外死亡,警方通過查閱死者的電腦和手機键闺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門寿烟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人艾杏,你說我怎么就攤上這事韧衣≈言澹” “怎么了购桑?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氏淑。 經(jīng)常有香客問我勃蜘,道長,這世上最難降的妖魔是什么假残? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任缭贡,我火速辦了婚禮炉擅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阳惹。我一直安慰自己谍失,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布莹汤。 她就那樣靜靜地躺著快鱼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纲岭。 梳的紋絲不亂的頭發(fā)上抹竹,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音止潮,去河邊找鬼窃判。 笑死,一個胖子當(dāng)著我的面吹牛喇闸,可吹牛的內(nèi)容都是我干的袄琳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼燃乍,長吁一口氣:“原來是場噩夢啊……” “哼跨蟹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起橘沥,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤窗轩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后座咆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痢艺,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年介陶,在試婚紗的時候發(fā)現(xiàn)自己被綠了堤舒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡哺呜,死狀恐怖舌缤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情某残,我是刑警寧澤国撵,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玻墅,受9級特大地震影響介牙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澳厢,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一环础、第九天 我趴在偏房一處隱蔽的房頂上張望囚似。 院中可真熱鬧,春花似錦线得、人聲如沸饶唤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搬素。三九已至,卻和暖如春魏保,著一層夾襖步出監(jiān)牢的瞬間熬尺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工谓罗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粱哼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓檩咱,卻偏偏與公主長得像揭措,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子刻蚯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容