練習(xí)書(shū)2-《python數(shù)據(jù)科學(xué)手冊(cè)》

numpy主要用法功戚,完結(jié)

代碼

import numpy as np
import pandas as pd
import time
import matplotlib.pyplot as plt

np.random.seed(0)
# 配置pandas顯示
pd.set_option('display.max_rows', 10)
pd.set_option('display.max_columns', 10)


def compute_reciprocals(values):
    output = np.empty(len(values))
    time_start = time.time()
    for i in range(len(values)):
        output[i] = 1.0 / values[i]
    time_end = time.time()
    return output, time_end-time_start


# numpy 通用函數(shù)
# NumPy 為很多類型的操作提供了非常方便的、靜態(tài)類型的猖败、可編譯程序的接口旷偿,也被稱作向量操作烹俗。
# 你可以通過(guò)簡(jiǎn)單地對(duì)數(shù)組執(zhí)行操作來(lái)實(shí)現(xiàn),這里對(duì)數(shù)組的操作將會(huì)被用于數(shù)組中的每一個(gè)元素萍程。
# 這種向量方法被用于將循環(huán)推送至 NumPy 之下的編譯層幢妄,這樣會(huì)取得 更快的執(zhí)行效率。
values = np.random.randint(1, 100, size=1000000)
# print(compute_reciprocals(values))
# 數(shù)組越大茫负,越省時(shí)
time_start = time.time()
print(1.0 / values)
time_end = time.time()
print(time_end-time_start)

# 數(shù)組運(yùn)算
x = np.arange(4)
print("x = ", x)
print("x + 5 = ", x + 5)
print("np.add(x, 5): ", np.add(x, 5))
# 絕對(duì)值
print("abs(x) = ", abs(x))
print("np.abs(x) = ", np.abs(x))
# 三角函數(shù)
theta = np.linspace(0, np.pi, 3)
print("theta = ", theta)
print("sin(theta) = ", np.sin(theta))
print("cos(theta) = ", np.cos(theta))
print("tan(thata) = ", np.tan(theta))
# 反三角函數(shù)
x = [-1, 0, 1]
print("arcsin(x) = ", np.arcsin(x))
print("arccos(x) = ", np.arccos(x))
print("arctan(x) = ", np.arctan(x))
# 指數(shù)和對(duì)數(shù)
x = [1, 2, 3]
print("x = ", x)
print("e^x = ", np.exp(x))
print("2^x = ", np.exp2(x))
print("3^x = ", np.power(3, x))
x = [1, 2, 4, 10]
print("x = ", x)
print("ln(x) = ", np.log(x))
print("log2(x) = ", np.log2(x))
print("log10(x) = ", np.log10(x))
# 高級(jí)的通用函數(shù)特性
# #指定輸出
x = np.arange(5)
y = np.empty(5)
np.multiply(x, 10, out=y)
print(y)
y = np.zeros(10)
np.power(2, x, out=y[::2])
print(y)
# #聚合
x = np.arange(1, 6)
print(np.add.reduce(x))
print(np.multiply.reduce(x))
print(np.add.accumulate(x))
print(np.multiply.accumulate(x))
# #外積
x = np.arange(1, 9)
print(np.multiply.outer(x, x))

# 聚合:最小值蕉鸳,最大值和其它值
# #數(shù)組求和
# #sum 函數(shù)和 np.sum 函數(shù)并不等同,
# #尤其是它們各自的可選參數(shù)都有不同的含義,np.sum 函數(shù)是知道數(shù)組的維度
L = np.random.random(100)

print(sum(L))
print(np.sum(L))
print(L.sum())

big_array = np.random.rand(1000000)
print(min(big_array))
print(max(big_array))
print(np.min(big_array))
print(np.max(big_array))
print(big_array.min())
print(big_array.max())
# #多維度聚合
M = np.random.random((3, 4))
print(M)
print(M.sum())
print(M.min(axis=0))  # 每列最小值
print(M.min(axis=1))  # 每行最小值
# 數(shù)組的計(jì)算:廣播
# 我們?cè)谇耙还?jié)中介紹了NumPy如何通過(guò)通用函數(shù)的向量化操作來(lái)減少緩慢的Python循環(huán),
# 另外一種向量化操作的方法是利用NumPy的廣播功能潮尝。
# 廣播可以簡(jiǎn)單理解為用于不同大小數(shù)組的二進(jìn)制通用函數(shù)(加榕吼、減、乘等)的一組規(guī)則勉失。

a = np.array([0, 1, 2])
b = np.array([5, 5, 5])
print(a + b)
print(a + 5)
M = np.ones((3, 3))
print(M + a)
a = np.arange(3)
b = np.arange(3)[:, np.newaxis]
print(a)
print(b)
print(a + b)

X = np.random.random((10, 3))
print(X)
Xmean = X.mean(0)
print(Xmean)
X_centered = X - Xmean
print(X_centered.mean(0))

x = np.linspace(0, 5, 50)
y = np.linspace(0, 5, 50)[:, np.newaxis]
z = np.sin(x) ** 10 + np.cos(10 + y * x) * np.cos(x)

plt.imshow(z, origin='lower', extent=[0, 5, 0, 5], cmap='viridis')
plt.colorbar()
# plt.show()

# 比較羹蚣、掩碼和布爾邏輯
# 當(dāng)你想基于某些準(zhǔn)則 來(lái)抽取、修改乱凿、計(jì)數(shù)或?qū)σ粋€(gè)數(shù)組中的值進(jìn)行其他操作時(shí)度宦,掩碼就可以派上用場(chǎng)了
x = np.array([1, 2, 3, 4, 5])
print(x < 3)
print(np.less(x, 3))
print(x != 3)
print((2 * x) == (x ** 2))
rng = np.random.RandomState(0)
x = rng.randint(10, size=(3, 4))
print(x)
print(x < 6)
# #操作布爾數(shù)組
print(np.count_nonzero(x < 6))
print(np.sum(x < 6))
print(np.sum(x < 6, axis=1))
print(np.any(x > 8))
print(np.all(x < 10))
print(np.all(x < 8, axis=1))
# #布爾運(yùn)算符
print(np.sum((x < 8) & (x > 6)))
print(np.sum((x > 8) | (x < 6)))
# #將布爾數(shù)組作為掩碼
print(x[x < 5])
# 花哨的索引(fancy indexing)。
# 花哨的索引和前面那些簡(jiǎn)單的索引非常類似告匠,但是傳遞的是索引數(shù)組戈抄,而不是單個(gè)標(biāo)量。
# 花哨的索引讓我們能夠快速獲得并修改復(fù)雜的數(shù)組值的子數(shù)據(jù)集后专。
rand = np.random.RandomState(42)
x = rand.randint(100, size=10)
print(x)
print([x[3], x[7], x[2]])
ind = [3, 7, 2]
print(x[ind])
ind = np.array([[3, 7], [4, 5]])
print(x[ind])

X = np.arange(12).reshape((3, 4))
print(X)
row = np.array([0, 1, 2])
col = np.array([2, 1, 3])
print(X[row, col])

# NumPy中的快速排序:np.sort和np.argsort
x = np.array([2, 1, 4, 3, 5])
print(np.sort(x))
x.sort()
print(x)

x = np.array([2, 1, 4, 3, 5])
i = np.argsort(x)
print(i)
print(x[i])

rand = np.random.RandomState(42)
X = rand.randint(0, 10, (4, 6))
print(X)

print(np.sort(X, axis=0))
print(np.sort(X, axis=1))

x = np.array([7, 2, 3, 1, 6, 5, 4])
print(np.partition(x, 3))

# 結(jié)構(gòu)化數(shù)據(jù):NumPy的結(jié)構(gòu)化數(shù)組
name = ['Alice', 'Bob', 'Cathy', 'Doug']
age = [25, 45, 37, 19]
weight = [55.0, 85.5, 68.0, 61.5]
data = np.zeros(4, dtype={'names': ('name', 'age', 'weight'),
                          'formats': ('U10', 'i4', 'f8')})
print(data.dtype)

data['name'] = name
data['age'] = age
data['weight'] = weight
print(data)
print(data['name'])
print(data[0])
print(data[-1]['name'])

print(data[data['age'] < 30]['name'])
# 記錄數(shù)組
# NumPy 還提供了np.recarray類划鸽。
# 它和前面介紹的結(jié)構(gòu)化數(shù)組幾乎相同,但是它有一個(gè)獨(dú)特的特征:
# 域可以像屬性一樣獲取戚哎,而不是像字典的鍵那樣獲取裸诽。
print(data['age'])
data_rec = data.view(np.recarray)
print(data_rec.age)

輸出

[0.02222222 0.02083333 0.01538462 ... 0.01075269 0.01612903 0.05263158]
0.004407167434692383
x =  [0 1 2 3]
x + 5 =  [5 6 7 8]
np.add(x, 5):  [5 6 7 8]
abs(x) =  [0 1 2 3]
np.abs(x) =  [0 1 2 3]
theta =  [0.         1.57079633 3.14159265]
sin(theta) =  [0.0000000e+00 1.0000000e+00 1.2246468e-16]
cos(theta) =  [ 1.000000e+00  6.123234e-17 -1.000000e+00]
tan(thata) =  [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
arcsin(x) =  [-1.57079633  0.          1.57079633]
arccos(x) =  [3.14159265 1.57079633 0.        ]
arctan(x) =  [-0.78539816  0.          0.78539816]
x =  [1, 2, 3]
e^x =  [ 2.71828183  7.3890561  20.08553692]
2^x =  [2. 4. 8.]
3^x =  [ 3  9 27]
x =  [1, 2, 4, 10]
ln(x) =  [0.         0.69314718 1.38629436 2.30258509]
log2(x) =  [0.         1.         2.         3.32192809]
log10(x) =  [0.         0.30103    0.60205999 1.        ]
[ 0. 10. 20. 30. 40.]
[ 1.  0.  2.  0.  4.  0.  8.  0. 16.  0.]
15
120
[ 1  3  6 10 15]
[  1   2   6  24 120]
[[ 1  2  3  4  5  6  7  8]
 [ 2  4  6  8 10 12 14 16]
 [ 3  6  9 12 15 18 21 24]
 [ 4  8 12 16 20 24 28 32]
 [ 5 10 15 20 25 30 35 40]
 [ 6 12 18 24 30 36 42 48]
 [ 7 14 21 28 35 42 49 56]
 [ 8 16 24 32 40 48 56 64]]
50.88772629915091
50.88772629915093
50.88772629915093
7.071203171893359e-07
0.9999997207656334
7.071203171893359e-07
0.9999997207656334
7.071203171893359e-07
0.9999997207656334
[[0.6784611  0.09292122 0.03920947 0.79832448]
 [0.44923861 0.95274259 0.03193135 0.18441813]
 [0.71417358 0.76371195 0.11957117 0.37578601]]
5.200489656709138
[0.44923861 0.09292122 0.03193135 0.18441813]
[0.03920947 0.03193135 0.11957117]
[5 6 7]
[5 6 7]
[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]
[0 1 2]
[[0]
 [1]
 [2]]
[[0 1 2]
 [1 2 3]
 [2 3 4]]
[[0.11936151 0.37497044 0.22944653]
 [0.07452786 0.41843762 0.99939192]
 [0.66974416 0.54717434 0.82711104]
 [0.23097044 0.16283152 0.27950484]
 [0.58540569 0.90657413 0.18671025]
 [0.07262851 0.0068539  0.07533272]
 [0.77114754 0.94502816 0.79396332]
 [0.81250458 0.68306202 0.09142216]
 [0.72943166 0.49977781 0.88075176]
 [0.77188336 0.33609389 0.35670153]]
[0.48376053 0.48808038 0.47203361]
[-2.22044605e-17 -1.11022302e-17 -6.10622664e-17]
[ True  True False False False]
[ True  True False False False]
[ True  True False  True  True]
[False  True False False False]
[[5 0 3 3]
 [7 9 3 5]
 [2 4 7 6]]
[[ True  True  True  True]
 [False False  True  True]
 [ True  True False False]]
8
8
[4 2 2]
True
True
[ True False  True]
2
9
[0 3 3 3 2 4]
[51 92 14 71 60 20 82 86 74 74]
[71, 86, 14]
[71 86 14]
[[71 86]
 [60 20]]
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[ 2  5 11]
[1 2 3 4 5]
[1 2 3 4 5]
[1 0 3 2 4]
[1 2 3 4 5]
[[6 3 7 4 6 9]
 [2 6 7 4 3 7]
 [7 2 5 4 1 7]
 [5 1 4 0 9 5]]
[[2 1 4 0 1 5]
 [5 2 5 4 3 7]
 [6 3 7 4 6 7]
 [7 6 7 4 9 9]]
[[3 4 6 6 7 9]
 [2 3 4 6 7 7]
 [1 2 4 5 7 7]
 [0 1 4 5 5 9]]
[2 1 3 4 6 5 7]
[('name', '<U10'), ('age', '<i4'), ('weight', '<f8')]
[('Alice', 25, 55. ) ('Bob', 45, 85.5) ('Cathy', 37, 68. )
 ('Doug', 19, 61.5)]
['Alice' 'Bob' 'Cathy' 'Doug']
('Alice', 25, 55.)
Doug
['Alice' 'Doug']
[25 45 37 19]
[25 45 37 19]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市型凳,隨后出現(xiàn)的幾起案子丈冬,更是在濱河造成了極大的恐慌,老刑警劉巖甘畅,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埂蕊,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡疏唾,警方通過(guò)查閱死者的電腦和手機(jī)蓄氧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)槐脏,“玉大人喉童,你說(shuō)我怎么就攤上這事《偬欤” “怎么了堂氯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)牌废。 經(jīng)常有香客問(wèn)我咽白,道長(zhǎng),這世上最難降的妖魔是什么畔规? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任局扶,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘三妈。我一直安慰自己畜埋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布畴蒲。 她就那樣靜靜地躺著悠鞍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪模燥。 梳的紋絲不亂的頭發(fā)上咖祭,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音蔫骂,去河邊找鬼么翰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辽旋,可吹牛的內(nèi)容都是我干的浩嫌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼补胚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼码耐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起溶其,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骚腥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瓶逃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體束铭,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年金闽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纯露。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剿骨。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡代芜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浓利,到底是詐尸還是另有隱情挤庇,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布贷掖,位于F島的核電站嫡秕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏苹威。R本人自食惡果不足惜昆咽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掷酗,春花似錦调违、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至浮声,卻和暖如春虚婿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背泳挥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工然痊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屉符。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓玷过,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親筑煮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子辛蚊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356