numpy 转存为matlab_Numpy学习打卡task01
numpy是什么
numpy ?讀作“馕派”,是 Python 編程語言的一個庫,它增加了對大型多維數組和矩陣的支持,以及對這些數組進行操作的大量高級數學函數的集合。NumPy 的祖先 Numeric 最初是由 Jim Hugunin 創建的,并得到了其他幾個開發者的貢獻。2005年,Travis Oliphant在對Numeric進行大量修改后,將競爭性的Numarray的功能融入到Numeric中,創建了NumPy。NumPy是一個開源軟件,有許多貢獻者。??NumPy的目標是Python的CPython參考實現,它是一個非優化的字節碼解釋器。為這個版本的Python編寫的數學算法通常比編譯后的等價物運行速度慢得多。NumPy通過提供多維數組和對數組進行有效操作的函數和運算符來部分解決慢的問題,需要使用NumPy重寫一些代碼,主要是內部循環。在Python中使用NumPy可以得到與MATLAB相當的功能,因為它們都是解釋型的,而且只要大部分操作是在數組或矩陣上進行的,而不是在標量上進行的,它們都允許用戶編寫快速的程序。相比之下,MATLAB擁有大量的附加工具箱,尤其是Simulink,而NumPy則與Python內在地集成在一起,Python是一種更現代、更完整的編程語言。此外,還提供了互補的Python包,SciPy是一個增加了更多類似MATLAB功能的庫,Matplotlib是一個提供類似MATLAB繪圖功能的繪圖包。在內部,MATLAB和NumPy都依靠BLAS和LAPACK進行高效的線性代數計算。廣泛使用的計算機視覺庫OpenCV的Python綁定利用NumPy數組來存儲和操作數據。由于具有多個通道的圖像被簡單地表示為三維數組,因此用其他數組進行索引、切片或遮蔽是訪問圖像特定像素的非常有效的方法。NumPy數組作為OpenCV中圖像、提取特征點、濾波核等的通用數據結構,極大地簡化了編程工作流程和調試。【1】numpy開源地址:https://github.com/numpy/numpynumpy的局限
在數組中插入或追加條目并不像使用 Python 的 list 那樣簡單。用于擴展數組的 np.pad(...) 例程實際上創建了具有所需形狀和填充值的新數組,將給定數組復制到新數組中并返回。NumPy的np.concatenate([a1,a2])操作實際上并沒有將兩個數組連接起來,而是返回一個新的數組,按順序填入兩個給定數組的條目。使用 np.reshape(...)重塑一個數組的維度,只有在數組中的元素數量不變的情況下才有可能。這些情況源于NumPy的數組必須是連續內存緩沖區上的視圖。一個名為Blaze的替換包試圖克服這個限制。不能表達為向量化操作的算法通常會運行得很慢,因為它們必須用 "純Python "來實現,而向量化可能會增加一些操作的內存復雜度,從常量到線性,因為必須創建和輸入一樣大的臨時數組。一些小組已經實現了數值代碼的運行時編譯以避免這些問題;與NumPy互操作的開源解決方案包括scipy.weave、numexpr和Numba,Cython和Pythran是這些靜態編譯的替代品。許多現代大規模科學計算應用的要求超出了NumPy數組的能力。例如,NumPy數組通常被加載到計算機的內存中,這對于大型數據集的分析來說可能容量不足。此外,NumPy操作是在一臺計算機的CPU上執行的。然而,許多線性代數操作可以通過在CPU的集群或專門的硬件(如GPU和TPU)上執行來加速,許多深度學習應用都依賴于這些硬件。因此,在過去的幾年里,科學python生態系統中出現了一些替代性的數組實現,例如用于分布式數組的Dask和用于GPU計算的TensorFlow或JAX。由于Numpy的流行,它們通常實現了Numpy的API的一個子集或模仿它,因此用戶可以改變他們的數組實現,而只需要對他們的代碼進行最小的修改【1】。numpy相關資源
numpy 開源社區地址?https://numpy.org/doc/stable/index.html?遇到不太了解的組件參數可以直接在搜索欄搜索例如:numpy.save()numpy?中文社區?https://www.numpy.org.cn/reference/由于還在翻譯搬運中,所以部分內容可能更新不夠及時,親測無法使用搜索功能。numpy Github開源地址:https://github.com/numpy/numpy俺的入門常用numpy操作命令合集:https://github.com/neowalter/DA_fundamental_python/blob/main/numpy_foundation.ipynb更多資源numpy資源搜索方式(手把手系列)https://baidu.bqrdh.com/?q=bnVtcHk=Datawhale學習講義
numpy 二進制文件
save()、savez()和load()函數以 numpy 專用的二進制類型(npy、npz)保存和讀取數據,這三個函數會自動處理ndim、dtype、shape等信息,使用它們讀寫數組非常方便,但是save()輸出的文件很難與其它語言編寫的程序兼容。
npy格式:以二進制的方式存儲文件,在二進制文件第一行以文本形式保存了數據的元信息(ndim,dtype,shape等),可以用二進制工具查看內容。
npz格式:以壓縮打包的方式存儲文件,可以用壓縮軟件解壓。
numpy.save(file, arr, allow_pickle=True, fix_imports=True)?Save an array to a binary file in NumPy?.npy?format.
numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')?Load arrays or pickled objects from?.npy,?.npz?or pickled files.
【例】
import numpy as npoutfile = r'.\test.npy'
np.random.seed(20200619)
x = np.random.uniform(0, 1, [3, 5])
np.save(outfile, x)
y = np.load(outfile)
print(y)# [[0.01123594 0.66790705 0.50212171 0.7230908 0.61668256]# [0.00668332 0.1234096 0.96092409 0.67925305 0.38596837]# [0.72342998 0.26258324 0.24318845 0.98795012 0.77370715]]
numpy.savez(file, *args, **kwds)?Save several arrays into a single file in uncompressed?.npz?format.
savez()第一個參數是文件名,其后的參數都是需要保存的數組,也可以使用關鍵字參數為數組起一個名字,非關鍵字參數傳遞的數組會自動起名為arr_0, arr_1, …。
savez()輸出的是一個壓縮文件(擴展名為npz),其中每個文件都是一個save()保存的npy文件,文件名對應于數組名。load()自動識別npz文件,并且返回一個類似于字典的對象,可以通過數組名作為關鍵字獲取數組的內容。
【例】將多個數組保存到一個文件,可以使用numpy.savez()函數。
import numpy as npoutfile = r'.\test.npz'
x = np.linspace(0, np.pi, 5)
y = np.sin(x)
z = np.cos(x)
np.savez(outfile, x, y, z_d=z)
data = np.load(outfile)
np.set_printoptions(suppress=True)
print(data.files) # ['z_d', 'arr_0', 'arr_1']
print(data['arr_0'])# [0. 0.78539816 1.57079633 2.35619449 3.14159265]
print(data['arr_1'])# [0. 0.70710678 1. 0.70710678 0. ]
print(data['z_d'])# [ 1. 0.70710678 0. -0.70710678 -1. ]
用解壓軟件打開 test.npz 文件,會發現其中有三個文件:arr_0.npy,arr_1.npy,z_d.npy,其中分別保存著數組x,y,z的內容。
文本文件
savetxt(),loadtxt()和genfromtxt()函數用來存儲和讀取文本文件(如TXT,CSV等)。genfromtxt()比loadtxt()更加強大,可對缺失數據進行處理。
numpy.savetxt(fname, X, fmt='%.18e', delimiter=' ', newline='\n', header='', footer='', comments='# ', encoding=None)?Save an array to a text file.
fname:文件路徑
X:存入文件的數組。
fmt:寫入文件中每個元素的字符串格式,默認’%.18e’(保留18位小數的浮點數形式)。
delimiter:分割字符串,默認以空格分隔。
numpy.loadtxt(fname, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)?Load data from a text file.
fname:文件路徑。
dtype:數據類型,默認為float。
comments: 字符串或字符串組成的列表,默認為# , 表示注釋字符集開始的標志。
skiprows:跳過多少行,一般跳過第一行表頭。
usecols:元組(元組內數據為列的數值索引), 用來指定要讀取數據的列(第一列為0)。
unpack:當加載多列數據時是否需要將數據列進行解耦賦值給不同的變量。
【例】寫入和讀出TXT文件。
import numpy as npoutfile = r'.\test.txt'
x = np.arange(0, 10).reshape(2, -1)
np.savetxt(outfile, x)
y = np.loadtxt(outfile)
print(y)# [[0. 1. 2. 3. 4.]# [5. 6. 7. 8. 9.]]
test.txt文件如下:
0.000000000000000000e+00 1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00 4.000000000000000000e+005.000000000000000000e+00 6.000000000000000000e+00 7.000000000000000000e+00 8.000000000000000000e+00 9.000000000000000000e+00
【例】寫入和讀出CSV文件。
import numpy as npoutfile = r'.\test.csv'
x = np.arange(0, 10, 0.5).reshape(4, -1)
np.savetxt(outfile, x, fmt='%.3f', delimiter=',')
y = np.loadtxt(outfile, delimiter=',')
print(y)# [[0. 0.5 1. 1.5 2. ]# [2.5 3. 3.5 4. 4.5]# [5. 5.5 6. 6.5 7. ]# [7.5 8. 8.5 9. 9.5]]
test.csv文件如下:
0.000,0.500,1.000,1.500,2.0002.500,3.000,3.500,4.000,4.500
5.000,5.500,6.000,6.500,7.000
7.500,8.000,8.500,9.000,9.500
genfromtxt()是面向結構數組和缺失數據處理的。
numpy.genfromtxt(fname, dtype=float, comments='#', delimiter=None, skip_header=0, skip_footer=0, converters=None, missing_values=None, filling_values=None, usecols=None, names=None, excludelist=None, deletechars=''.join(sorted(NameValidator.defaultdeletechars)), replace_space='_', autostrip=False, case_sensitive=True, defaultfmt="f%i", unpack=None, usemask=False, loose=True, invalid_raise=True, max_rows=None, encoding='bytes')?Load data from a text file, with missing values handled as specified.
names:設置為True時,程序將把第一行作為列名稱。
data.csv文件如下:
id,value1,value2,value31,123,1.4,23
2,110,0.5,18
3,164,2.1,19
【例】
import numpy as npoutfile = r'.\data.csv'
x = np.loadtxt(outfile, delimiter=',', skiprows=1)
print(x)# [[ 1. 123. 1.4 23. ]# [ 2. 110. 0.5 18. ]# [ 3. 164. 2.1 19. ]]
x = np.loadtxt(outfile, delimiter=',', skiprows=1, usecols=(1, 2))
print(x)# [[123. 1.4]# [110. 0.5]# [164. 2.1]]
val1, val2 = np.loadtxt(outfile, delimiter=',', skiprows=1, usecols=(1, 2), unpack=True)
print(val1) # [123. 110. 164.]
print(val2) # [1.4 0.5 2.1]
【例】
import numpy as npoutfile = r'.\data.csv'
x = np.genfromtxt(outfile, delimiter=',', names=True)
print(x)# [(1., 123., 1.4, 23.) (2., 110., 0.5, 18.) (3., 164., 2.1, 19.)]
print(type(x)) #
print(x.dtype)# [('id', '
print(x['id']) # [1. 2. 3.]
print(x['value1']) # [123. 110. 164.]
print(x['value2']) # [1.4 0.5 2.1]
print(x['value3']) # [23. 18. 19.]
data1.csv文件
id,value1,value2,value31,123,1.4,23
2,110,,18
3,,2.1,19
【例】
import numpy as npoutfile = r'.\data1.csv'
x = np.genfromtxt(outfile, delimiter=',', names=True)
print(x)# [(1., 123., 1.4, 23.) (2., 110., nan, 18.) (3., nan, 2.1, 19.)]
print(type(x)) #
print(x.dtype)# [('id', '
print(x['id']) # [1. 2. 3.]
print(x['value1']) # [123. 110. nan]
print(x['value2']) # [1.4 nan 2.1]
print(x['value3']) # [23. 18. 19.]
文本格式選項
numpy.set_printoptions(precision=None,threshold=None, edgeitems=None,linewidth=None, suppress=None, nanstr=None, infstr=None,formatter=None, sign=None, floatmode=None, **kwarg)?Set printing options.
precision:設置浮點精度,控制輸出的小數點個數,默認是8。
threshold:概略顯示,超過該值則以“…”的形式來表示,默認是1000。
linewidth:用于確定每行多少字符數后插入換行符,默認為75。
suppress:當suppress=True,表示小數不需要以科學計數法的形式輸出,默認是False。
nanstr:浮點非數字的字符串表示形式,默認nan。
infstr:浮點無窮大的字符串表示形式,默認inf。
These options determine the way floating point numbers, arrays and other NumPy objects are displayed.
【例】
import numpy as npnp.set_printoptions(precision=4)
x = np.array([1.123456789])
print(x) # [1.1235]
np.set_printoptions(threshold=20)
x = np.arange(50)
print(x) # [ 0 1 2 ... 47 48 49]
np.set_printoptions(threshold=np.iinfo(np.int).max)
print(x)# [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23# 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47# 48 49]
eps = np.finfo(float).eps
x = np.arange(4.)
x = x ** 2 - (x + eps) ** 2
print(x) # [-4.9304e-32 -4.4409e-16 0.0000e+00 0.0000e+00]
np.set_printoptions(suppress=True)
print(x) # [-0. -0. 0. 0.]
x = np.linspace(0, 10, 10)
print(x)# [ 0. 1.1111 2.2222 3.3333 4.4444 5.5556 6.6667 7.7778 8.8889# 10. ]
np.set_printoptions(precision=2, suppress=True, threshold=5)
print(x) # [ 0. 1.11 2.22 ... 7.78 8.89 10. ]
numpy.get_printoptions()?Return the current print options.
【例】
import numpy as npx = np.get_printoptions()
print(x)# {# 'edgeitems': 3, # 'threshold': 1000, # 'floatmode': 'maxprec', # 'precision': 8, # 'suppress': False, # 'linewidth': 75, # 'nanstr': 'nan', # 'infstr': 'inf', # 'sign': '-', # 'formatter': None, # 'legacy': False# }
講義地址:http://datawhale.club/t/topic/266
【1】WIKI百科?https://en.wikipedia.org/wiki/NumPy精彩推薦數據分析的Python之路
IT項目管理
NLP學習筆記
總結
以上是生活随笔為你收集整理的numpy 转存为matlab_Numpy学习打卡task01的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 王者荣耀信誉积分怎么申诉(如何玩好《王者
- 下一篇: 制冷剂品牌