NumPy 數(shù)組對象

NumPy 數(shù)組對象

# 來源:NumPy Essentials ch2

數(shù)組索引和切片

# 創(chuàng)建 100x100 個 0~1 隨機(jī)數(shù)
x = np.random.random((100, 100)) 

# 取第 42 行 87 列的元素(從零開始)
y = x[42, 87]

# 取第 k 行的所有元素
# 等價于 x[k] 和 x[k, ...]
print(x[k, :]) 

a = np.array([[10 * y + x for x in range(6)] for y in range(6)])
'''
+--+--+--+--+--+--+
| 0| 1| 2| 3| 4| 5|
+--+--+--+--+--+--+
|10|11|12|13|14|15|
+--+--+--+--+--+--+
|20|21|22|23|24|25|
+--+--+--+--+--+--+
|30|31|32|33|34|35|
+--+--+--+--+--+--+
|40|41|42|43|44|45|
+--+--+--+--+--+--+
|50|51|52|53|54|55|
+--+--+--+--+--+--+
'''

a[0, 3:5]
'''
array([3, 4])
+--+--+--+--+--+--+
|  |  |  | 3| 4|  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
'''

a[4: ,4:]
'''
array([[44, 45],
       [54, 55]])
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |44|45|
+--+--+--+--+--+--+
|  |  |  |  |54|55|
+--+--+--+--+--+--+
'''

a[:, 2]
'''
array([ 2, 12, 22, 32, 42, 52])
+--+--+--+--+--+--+
|  |  | 2|  |  |  |
+--+--+--+--+--+--+
|  |  |12|  |  |  |
+--+--+--+--+--+--+
|  |  |22|  |  |  |
+--+--+--+--+--+--+
|  |  |32|  |  |  |
+--+--+--+--+--+--+
|  |  |42|  |  |  |
+--+--+--+--+--+--+
|  |  |52|  |  |  |
+--+--+--+--+--+--+
'''

a[2::2, ::2]
'''
array([[20, 22, 24],
       [40, 42, 44]])
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|20|  |22|  |  |24|
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
|40|  |42|  |  |44|
+--+--+--+--+--+--+
|  |  |  |  |  |  |
+--+--+--+--+--+--+
'''

內(nèi)存布局

# flags 屬性保存了數(shù)組的內(nèi)存布局信息
print x.flags
'''
  C_CONTIGUOUS : True 
  F_CONTIGUOUS : False 
  OWNDATA : True 
  WRITEABLE : True 
  ALIGNED : True 
  UPDATEIFCOPY : False 
  
C_CONTIGUOUS:是否為 C 風(fēng)格連續(xù),也就是行為主计露,最后一個維度是連續(xù)的
F_CONTIGUOUS:是否為 F 風(fēng)格連續(xù),也就是列為主姻报,第一個維度是連續(xù)的
OWNDATA:是否擁有數(shù)據(jù),視圖不擁有數(shù)據(jù)
WRITEABLE:是否可寫
ALIGNED:是否對齊
UPDATEIFCOPY:
'''

# NumPy 默認(rèn)是 C 風(fēng)格連續(xù)
c_array = np.random.rand(10000, 10000) 
# 可以手動轉(zhuǎn)換為 F 風(fēng)格連續(xù)
f_array = np.asfortranarray(c_array) 

def sum_row(x):
    '''
    計算第零行的和
    '''
    return np.sum(x[0, :])
def sum_col(x):
    '''
    計算第零列的和
    '''
    return np.sum(x[:, 0])
    
'''
我們可以看到怠苔,C 風(fēng)格數(shù)組按行訪問比較快
F 風(fēng)格數(shù)組按列訪問比較快

%timeit sum_row(c_array) 
10000 loops, best of 3: 21.2 μs per loop 
 
%timeit sum_row(f_array) 
10000 loops, best of 3: 157 μs per loop 
 
%timeit sum_col(c_array) 
10000 loops, best of 3: 162 μs per loop 
 
%timeit sum_col(f_array) 
10000 loops, best of 3: 21.4 μs per loop 
'''

副本和視圖

# 視圖不共享 NumPy 對象曲掰,共享底層數(shù)據(jù)
# 副本不共享 NumPy 對象,不共享底層數(shù)據(jù)

x = np.random.rand(100,10)

# 切片和索引都會產(chǎn)生視圖
# 而不是副本
y = x[:5, :] 

# 看看底層內(nèi)存是否一致
np.may_share_memory(x, y)
# True

# 我們將 y 所有元素清零
y[:] = 0

# 并打印 x 前 5 行
print(x[:5, :])
'''
[[ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] 
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] 
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] 
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.] 
 [ 0.  0.  0.  0.  0.  0.  0.  0.  0.  0.]] 
'''

# 但是這樣不會產(chǎn)生視圖
x = np.random.rand(100,10)
y = np.empty([5, 10])
y[:] = x[:5, :]
np.may_share_memory(x, y)
# False 

y[:] = 0 
print(x[:5, :])

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

# 最簡單的方式就是從 Python 列表創(chuàng)建 NumPy 數(shù)組
x = np.array([1, 2, 3])
y = np.array(['hello', 'world']) 

# 但有時我們想創(chuàng)建范圍內(nèi)的數(shù)值數(shù)組
x = range(5)
y = np.array(x) 

# NumPy 有個輔助函數(shù)
# 等價于上面的操作
x = np.arange(5) 

# 多維數(shù)組也是一樣的
x = np.array([[1, 2, 3],[4, 5, 6]]) 

x.ndim # 2
x.shape # (2, 3)

# rand 創(chuàng)建指定形狀的數(shù)組男杈,元素為 0~1 的隨機(jī)數(shù)
x = np.random.rand(2, 2, 2) 
print(x.shape) 
# (2, 2, 2)

# random 和 rand 相似
# 只是接受元組形式的形狀
shape_tuple = (2, 3, 4) 
y = np.random.random(shape_tuple)
print(y.shape) 
# (2, 3, 4) 

# randint(l, h, size=sz) 創(chuàng)建 l ~ h-1 的隨機(jī)整數(shù)
# 默認(rèn)是 10 個
LOW, HIGH = 1, 11 
SIZE = 10
x = np.random.randint(LOW, HIGH, size=SIZE) 
print(x) 
[ 6  9 10  7  9  5  8  8  9  3] 

# 還有一些其它的創(chuàng)建函數(shù)
# zeros(size) 和 ones(size) 創(chuàng)建指定形狀的全零或全一數(shù)組
# eye(n) 創(chuàng)建 n 維單位矩陣
# full(size, n) 創(chuàng)建指定形狀的純量數(shù)組,所有元素都為 n

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


x = np.random.random((10,10)) 
 
# dtype 屬性是數(shù)據(jù)類型
x.dtype 
# dtype('float64') 

x = np.array(range(10)) 
x.dtype 
# dtype('int32') 
 
x = np.array(['hello', 'world']) 
x.dtype 
# dtype('S5') 

# 創(chuàng)建數(shù)組時可以指定數(shù)據(jù)類型
# 我們可以傳入 NumPy 類型
x = np.ones((10, 10), dtype=np.int) 
x.dtype 
# dtype('int32') 

# 也可以傳入表示類型的字符串
x = np.zeros((10, 10), dtype='|S1')
x.dtype 
# dtype('S1') 

# NumPy 會使用它們來構(gòu)造 dtype
# 完整列表請見
# http://docs.scipy.org/doc/numpy/user/basics.types.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末调俘,一起剝皮案震驚了整個濱河市伶棒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌彩库,老刑警劉巖肤无,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異骇钦,居然都是意外死亡宛渐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進(jìn)店門眯搭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窥翩,“玉大人,你說我怎么就攤上這事鳞仙】芪茫” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵棍好,是天一觀的道長仗岸。 經(jīng)常有香客問我,道長借笙,這世上最難降的妖魔是什么扒怖? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮业稼,結(jié)果婚禮上盗痒,老公的妹妹穿的比我還像新娘。我一直安慰自己盼忌,他們只是感情好积糯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谦纱,像睡著了一般看成。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上跨嘉,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天川慌,我揣著相機(jī)與錄音,去河邊找鬼祠乃。 笑死梦重,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亮瓷。 我是一名探鬼主播琴拧,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嘱支!你這毒婦竟也來了蚓胸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤除师,失蹤者是張志新(化名)和其女友劉穎沛膳,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汛聚,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锹安,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倚舀。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叹哭。...
    茶點(diǎn)故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瞄桨,靈堂內(nèi)的尸體忽然破棺而出话速,到底是詐尸還是另有隱情,我是刑警寧澤芯侥,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布泊交,位于F島的核電站,受9級特大地震影響柱查,放射性物質(zhì)發(fā)生泄漏廓俭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一唉工、第九天 我趴在偏房一處隱蔽的房頂上張望研乒。 院中可真熱鬧,春花似錦淋硝、人聲如沸雹熬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竿报。三九已至铅乡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烈菌,已是汗流浹背阵幸。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芽世,地道東北人挚赊。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像济瓢,于是被迫代替她去往敵國和親荠割。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評論 2 344

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