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