Python 數(shù)據(jù)科學筆記1

Python DataScience Handbook 學習筆記1

第一部分 numpy

相比較于python內(nèi)置的數(shù)據(jù)類型,numpy提供了更為高效的數(shù)據(jù)操作.
首先我們要了解一下python內(nèi)置的數(shù)據(jù)類型.以Integer為例纳决,C代碼的實現(xiàn)如下

# This code illustrates why python allows dynamic typing
struct _longobject {
    long ob_refcnt;
    PyTypeObject *ob_type;
    size_t ob_size;
    long ob_digit[1];
};

int 類型在實現(xiàn)中是一個指向上述結構體的指針塞蹭;

numpy中的核心:array

numpy array 與 list的對比可以通過下圖來體會:


diff

創(chuàng)建

接下來我們通過實例來看一下在numpy中如何簡單優(yōu)雅地創(chuàng)建數(shù)組

In [1]: import numpy as np

In [2]: np.__version__
Out[2]: '1.13.3'

In [3]: np?

In [4]: np.array([3.14, 3, 1, 2])
Out[4]: array([ 3.14,  3.  ,  1.  ,  2.  ])

In [5]: np.zeros((3, 5), dtype=int)
Out[5]: 
array([[0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 0]])

In [6]: np.arange(0,20,2)
Out[6]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

In [7]: np.linspace(0,1,5)
Out[7]: array([ 0.  ,  0.25,  0.5 ,  0.75,  1.  ])

In [8]: np.random.random((3,3))
Out[8]: 
array([[ 0.43170959,  0.10099413,  0.45859315],
       [ 0.62548971,  0.57233299,  0.6632921 ],
       [ 0.74947709,  0.31867245,  0.05988924]])

In [9]: np.random.normal(0, 1, (3,3))
Out[9]: 
array([[-1.45242445, -1.27771487,  1.39220407],
       [-0.66294773, -1.56926783, -0.02177722],
       [ 1.0318081 , -0.87103441,  0.78930381]])

In [10]: np.random.randint(0, 10, (3, 3))
Out[10]: 
array([[0, 5, 8],
       [2, 7, 7],
       [5, 0, 5]])

In [11]: np.zeros(10, dtype=np.complex128)
Out[11]: 
array([ 0.+0.j,  0.+0.j,  0.+0.j,  0.+0.j,  0.+0.j,  0.+0.j,  0.+0.j,
        0.+0.j,  0.+0.j,  0.+0.j])


基本操作

對于一維的數(shù)組,與python原生的操作非常相似姻几,在此不在贅述。我在這里列出了一些較為fancy的部分.

In [5]: x2 = np.random.randint(15, size = (3,5), dtype='int')

In [6]: x2
Out[6]: 
array([[ 8,  8,  5, 11, 13],
       [ 2, 14,  2,  9,  6],
       [ 8, 14,  6,  4,  9]])

In [7]: x2[::-1, ::-1]
Out[7]: 
array([[ 9,  4,  6, 14,  8],
       [ 6,  9,  2, 14,  2],
       [13, 11,  5,  8,  8]])


與matlab類似,numpy可以通過:符號來實現(xiàn)整行整列的訪問

x2[:, 0] # first column of x2
x2[0, :] # first row of x2

接下來我們要強調非常重要的一點:在對numpy中的array作slice等操作時臭埋,與原生列表有很大的不同,主要表現(xiàn)為它會產(chǎn)生一個"view"而非一個"copy"臀玄。通俗的說就是它不重新分配內(nèi)存瓢阴,創(chuàng)建列表,而是直接在原始數(shù)據(jù)上操作健无。

In [8]: x = [1,2,3,4,5]

In [9]: y = np.array([1,2,3,4,5])

In [10]: copy = x[1:3]
In [12]: copy[1] = 1

In [13]: copy
Out[13]: [2, 1]

In [14]: not_copy = y[1:3]
In [16]: not_copy[1] = 1

In [17]: not_copy
Out[17]: array([2, 1])

In [18]: x
Out[18]: [1, 2, 3, 4, 5]

In [19]: y
Out[19]: array([1, 2, 1, 4, 5])


當然荣恐,只要顯式地調用copy()就能創(chuàng)建一個copy而非view.

x2_sub_copy = x2[:2, :2].copy()

reshape

x = np.array([1, 2, 3])

# row vector via reshape
x.reshape((1, 3))
Out[39]:
array([[1, 2, 3]])
In [40]:
# row vector via newaxis
x[np.newaxis, :]
Out[40]:
array([[1, 2, 3]])
In [41]:
# column vector via reshape
x.reshape((3, 1))
Out[41]:
array([[1],
       [2],
       [3]])
In [42]:
# column vector via newaxis
x[:, np.newaxis]
Out[42]:
array([[1],
       [2],
       [3]])

Concatenation

grid = np.array([[1, 2, 3],
                 [4, 5, 6]])
In [46]:
# concatenate along the first axis
np.concatenate([grid, grid])
Out[46]:
array([[1, 2, 3],
       [4, 5, 6],
       [1, 2, 3],
       [4, 5, 6]])
In [47]:
# concatenate along the second axis (zero-indexed)
np.concatenate([grid, grid], axis=1)
Out[47]:
array([[1, 2, 3, 1, 2, 3],
       [4, 5, 6, 4, 5, 6]])
      

Splitting

x = [1, 2, 3, 99, 99, 3, 2, 1]
x1, x2, x3 = np.split(x, [3, 5])
print(x1, x2, x3)
[1 2 3] [99 99] [3 2 1]
In [23]: grid = np.arange(16).reshape((4,4))

In [24]: grid
Out[24]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [25]: a, b = np.vsplit(grid, [3])

In [26]: a
Out[26]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])

In [27]: b
Out[27]: array([[12, 13, 14, 15]])

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市累贤,隨后出現(xiàn)的幾起案子叠穆,更是在濱河造成了極大的恐慌,老刑警劉巖臼膏,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼被,死亡現(xiàn)場離奇詭異,居然都是意外死亡渗磅,警方通過查閱死者的電腦和手機嚷硫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來始鱼,“玉大人仔掸,你說我怎么就攤上這事∫角澹” “怎么了起暮?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長状勤。 經(jīng)常有香客問我鞋怀,道長,這世上最難降的妖魔是什么持搜? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任密似,我火速辦了婚禮,結果婚禮上葫盼,老公的妹妹穿的比我還像新娘残腌。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布抛猫。 她就那樣靜靜地躺著蟆盹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闺金。 梳的紋絲不亂的頭發(fā)上逾滥,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天,我揣著相機與錄音败匹,去河邊找鬼寨昙。 笑死,一個胖子當著我的面吹牛掀亩,可吹牛的內(nèi)容都是我干的舔哪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼槽棍,長吁一口氣:“原來是場噩夢啊……” “哼捉蚤!你這毒婦竟也來了?” 一聲冷哼從身側響起炼七,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤缆巧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后特石,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盅蝗,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鳖链,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年姆蘸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芙委。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡逞敷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出灌侣,到底是詐尸還是另有隱情推捐,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布侧啼,位于F島的核電站牛柒,受9級特大地震影響,放射性物質發(fā)生泄漏痊乾。R本人自食惡果不足惜皮壁,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哪审。 院中可真熱鬧蛾魄,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扔水,卻和暖如春痛侍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魔市。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工恋日, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘹狞。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓岂膳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磅网。 傳聞我的和親對象是個殘疾皇子谈截,可洞房花燭夜當晚...
    茶點故事閱讀 43,509評論 2 348

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