除了列表,還有誰(shuí)誰(shuí)誰(shuí)
數(shù)組
何時(shí)使用數(shù)組:需要一個(gè)只包含數(shù)字的列表;
數(shù)組可以做什么:
- 支持所有跟可變序列有關(guān)的操作,包括 .pop、.insert 和 .extend
- 提供從文件讀取和存入文件的更快的方法,如 .frombytes 和 .tofile
如何創(chuàng)建數(shù)組
- 創(chuàng)建數(shù)組需要一個(gè)類型碼,這個(gè)類型碼用來(lái)表示在底層的 C 語(yǔ)言應(yīng)該存放怎樣的數(shù)據(jù)類型。
- b 類型碼代表的是有符號(hào)的字符
數(shù)組的讀取和寫入:
array.tofile 和 array.fromfile 用起來(lái)很簡(jiǎn)單,它的速度也很快。
#從創(chuàng)建一個(gè)有 1000 萬(wàn)個(gè)隨機(jī)浮點(diǎn)數(shù)的數(shù)組
from array import array
from random import random
floats = array('d',(random() for i in range(10**7)))
print(floats[-1])
print(len(floats))
0.275005837260377
10000000
# 寫入文件數(shù)組
fp = open('floats.bin','wb')
# 把數(shù)組存入一個(gè)二進(jìn)制文件里
floats.tofile(fp)
fp.close()
# 讀取文件數(shù)組
floats2 = array('d')
fp = open('floats.bin','rb')
# 把 1000 萬(wàn)個(gè)浮點(diǎn)數(shù)從二進(jìn)制文件里讀取出來(lái)
floats2.fromfile(fp,10**7)
fp.close()
print(floats2[-1])
print(floats == floats2)
0.275005837260377
True
列表和數(shù)組的屬性和方法


內(nèi)存視圖
memoryview 是一個(gè)內(nèi)置類,它能讓用戶在不復(fù)制內(nèi)容的情況下操作同一個(gè)數(shù)組的不同切片。在數(shù)據(jù)結(jié)構(gòu)之間共享內(nèi)存。
memoryview.cast 的概念跟數(shù)組模塊類似,能用不同的方式讀寫同一塊內(nèi)存數(shù)據(jù),而且內(nèi)容字節(jié)不會(huì)隨意移動(dòng)。
import array
numbers = array.array('h',[-2,-1,0,1,2])
# memv 里的 5 個(gè)元素跟數(shù)組里的沒(méi)有區(qū)別
memv = memoryview(numbers)
# 顯示地址
print(memv)
print(len(memv))
print(memv[0],memv[1])
print(memv.tolist())
#把 memv 里的內(nèi)容轉(zhuǎn)換成 'B' 類型,也就是無(wú)符號(hào)字符
memv_oct = memv.cast('B')
print(memv_oct.tolist())
# 把位于位置 5 的字節(jié)賦值成 4
memv_oct[5] = 4
#占 2 個(gè)字節(jié)的整數(shù)的高位字節(jié)改成了 4
print(numbers)
<memory at 0x000001D5ECB1F648>
5
-2 -1
[-2, -1, 0, 1, 2]
[254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
array('h', [-2, -1, 1024, 1, 2])
NumPy和SciPy
NumPy 和 SciPy不是標(biāo)準(zhǔn)的Python庫(kù),是第三方的庫(kù)。它們提供的高階數(shù)組和矩陣操作。正是有了這么強(qiáng)大的第三方庫(kù),讓Python 成為科學(xué)計(jì)算應(yīng)用的主流語(yǔ)言。Python的靈活強(qiáng)大也就是基于很多豐富的第三方庫(kù)。
Numpy: 實(shí)現(xiàn)了多維同質(zhì)數(shù)組(homogeneous array)和矩陣
Scipy: SciPy 是基于 NumPy 的另一個(gè)庫(kù),它提供了很多跟科學(xué)計(jì)算有關(guān)的算法,專為線性代數(shù)、數(shù)值積分和統(tǒng)計(jì)學(xué)而設(shè)計(jì)。
import numpy as np
a = np.arange(12)
print(a)
print(type(a))
print(a.shape)
a.shape = 3,4
print(a)
print(a.shape)
print(a[1])
print(a[:,1])
[ 0 1 2 3 4 5 6 7 8 9 10 11]
<class 'numpy.ndarray'>
(12,)
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
(3, 4)
[4 5 6 7]
[1 5 9]
分享關(guān)于人工智能,機(jī)器學(xué)習(xí),深度學(xué)習(xí)以及計(jì)算機(jī)視覺的好文章,同時(shí)自己對(duì)于這個(gè)領(lǐng)域?qū)W習(xí)心得筆記。想要一起深入學(xué)習(xí)人工智能的小伙伴一起結(jié)伴學(xué)習(xí)吧!掃碼上車!
