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