python2與python3之 pickle 模塊的區別
- 在python2中
import pickle
D=[1,2,3,4]
pickle.dump(D,file('Data.pkl','w'))
pickle.load(file('Data.pkl'))
- 在python3中
import pickle
D=[1,2,3,4]
pickle.dump(D,open('Data.pkl','wb'))
pickle.load(open('Data.pkl','rb'))
========================================================================
python讀取 wav 文件, 將 wav 文件轉化爲一系列數據。
1.
import wave
from scipy.io import wavfile
signal=wavfile.read('file.wav')
2.
import wave
import numpy as np
f=wave.open('file.wav',"rb")
params=f.getparams()
nchannels,sampwidth,framerate,nframes=params[:4]
str_data=f.readframes(nframes)
wave_data=np.fromstring(str_data,dtype=np.short)
========================================================================
下劃線
-
單下劃線
在解釋器中,比如 IPython 窗口,輸入單下劃線可以再一次的得到上一條的執行結果。
可以作爲一個臨時性的名稱,比如可以這樣: for _ in range(10),當執行完這個語句後,沒有任何的痕跡。
帶有單下劃線的變量、屬性、方法等,不能通過 import * 來導入,理論上 import * 可以導入所有的東西。指定該名稱屬性爲私有,只供內部使用 -
名稱前的雙下劃線
舉個例子:有一個class A,它擁有一個方法 def __xxx(self)。
有另外一個class B(A)——類B繼承了類A的所有方法。
但是B有自己的一個方法 def __xxx(self)。
理論上來說,A 的 __xxx 方法會被 override,
但是如果方法是帶有雙下劃線,那麼 A 的 __xxx 方法不會被 override。
=======================================================================
np.diag對準確維度的數組與缺少維度的數組的操作結果不一樣
np.diag(np.array([1, 2, 3, 4]))
Out:
array([[1, 0, 0, 0],
[0, 2, 0, 0],
[0, 0, 3, 0],
[0, 0, 0, 4]])
np.diag(np.array([[1, 2, 3, 4]]))
Out:
array([1])
========================================================================
python維度設置
import numpy as np
x=np.array([1, 2, 3, 4])
x.shape
(4,)
y=x[np.newaxis, :]
y.shape
(1, 4)
z=x[:, np.newaxis]
z.shape
(4, 1)
len(y)是返回y的第一維大小,所以len(y)的結果是1