Python小點

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章