Python進(jìn)階06_除了列表,還有誰(shuí)誰(shuí)誰(shuí)

除了列表,還有誰(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ù)組的屬性和方法

列表和數(shù)組的屬性和方法對(duì)比
列表和數(shù)組的屬性和方法對(duì)比

內(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í)吧!掃碼上車!

瓦力人工智能 - 掃碼上車
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文鏈接 《Python數(shù)據(jù)分析》(Python for Data Analysis, 2nd Edition)第...
    李紹俊閱讀 8,747評(píng)論 0 5
  • 基礎(chǔ)篇NumPy的主要對(duì)象是同種元素的多維數(shù)組。這是一個(gè)所有的元素都是一種類型、通過(guò)一個(gè)正整數(shù)元組索引的元素表格(...
    oyan99閱讀 5,285評(píng)論 0 18
  • 先決條件 在閱讀這個(gè)教程之前,你多少需要知道點(diǎn)python。如果你想從新回憶下,請(qǐng)看看Python Tutoria...
    舒map閱讀 2,717評(píng)論 1 13
  • NumPy是Python中關(guān)于科學(xué)計(jì)算的一個(gè)類庫(kù),在這里簡(jiǎn)單介紹一下。 來(lái)源:https://docs.scipy...
    灰太狼_black閱讀 1,329評(píng)論 0 5
  • 一、numpy概述 numpy(Numerical Python)提供了python對(duì)多維數(shù)組對(duì)象的支持:ndar...
    L_steven的貓閱讀 3,602評(píng)論 1 24

友情鏈接更多精彩內(nèi)容