提取碼:7jal
def
csp_yx
(eegsignals_x_train,eegsignals_y_train)
:
eeg_channels =
3 eeg_trials =
280 eeg_classes =
2 class_labels =[1
,2]# 計算協方差矩陣 cov1 cov2
trialcov = np.zeros(
(eeg_channels,eeg_channels,eeg_trials)
)for i in
range
(280):
e = eegsignals_x_train[:,
:,i]
.t # print(e.shape)
ee = np.dot(e,e.t)
trialcov[:,
:,i]
= ee/np.trace(ee)
;
cov1 = np.zeros(
(eeg_channels,eeg_channels,
140)
) cov2 = np.zeros(
(eeg_channels,eeg_channels,
140)
)
matrixcov = np.zeros((3
,3,2
))k=
0 s=
0for i in
range
(eeg_channels)
:if eegsignals_y_train[i]==1
: cov1[:,
:,k]
= trialcov[:,
:,i]
k=k+
1if eegsignals_y_train[i]==2
: cov2[:,
:,s]
= trialcov[:,
:,i]
s=s+
1
np.set_printoptions(precision=4)
# 計算平均協方差矩陣之和 covtotal
cov1 = np.mean(cov1,2)
cov2 = np.mean(cov2,2)
covtotal = cov1 + cov2
print
(covtotal)
# 計算公共特徵向量矩陣和特徵值
[dt,uc]
= np.linalg.eigh(covtotal)
# 降序排序
uc = uc[
:,dt.argsort()[
::-1
]]dt =
sorted
(dt,reverse=
true
)# 矩陣白化
dt = np.diag(dt)
dt = np.sqrt(1.
/dt)
# 去 inf值
c = np.isinf(dt)
dt[c]=0
print
(dt)
p = np.dot(dt,uc.t)
# print(p)
# 將p作用於 cov1 cov2
transformedcov1 = np.dot(np.dot(p,cov1)
,p.t)
transformedcov2 = np.dot(np.dot(p,cov2)
,p.t)
# s1 = p*r1*p.t
# 將 transformedcov1 按主分量分解得到公共特徵向量矩陣 b
[d1,u1]
= np.linalg.eig(transformedcov1)
# 降序
u1 = u1[
:,d1.argsort()]
d1 =
sorted
(d1,reverse=
true
)# print(u1)
[d2,u2]
= np.linalg.eig(transformedcov2)
# 公升序
u2 = u2[
:,d2.argsort()]
d2 = np.sort(d2)
# print(u2)
# 計算投影矩陣
cspmatrix = np.dot(u1.t,p)
return cspmatrix
import scipy.io as sio
import numpy as np
datasetfile =
"../l-r hand/dataset_bcicomp1.mat"
testlabelfile =
"../test/labels_data_set_iii.mat"
eegsignals = sio.loadmat(datasetfile)
labelset = sio.loadmat(testlabelfile)
eegsignals_x_train = np.concatenate(
[eegsignals[
'x_train'
],eegsignals[
'x_test']]
, axis=2)
eegsignals_y_train = np.concatenate(
[eegsignals[
'y_train'
],labelset[
'y_test']]
)
w = csp_yx.csp_yx(eegsignals_x_train,eegsignals_y_train)
filterpairs =
1# csp特徵選擇引數m
features_train = np.zeros(
(280,2
*filterpairs)
)# features_test = np.zeros((80, 2*filterpairs))
m1 = w[
0:filterpairs]
m2 = w[
3-filterpairs:3]
filter = np.concatenate(
[m1,m2]
)filter
data = np.concatenate(
[eegsignals[
'x_train'
],eegsignals[
'x_test']]
,axis=2)
projectedtrial = np.zeros((2
*filterpairs,
1152))
eeg_trials =
280for i in
range
(eeg_trials)
:# 將源訊號投影到 csp空間上
projectedtrial = np.dot(filter,data[:,
:,i]
.t)# 將投影訊號的方差得對數作為特徵
variances_train = np.var(projectedtrial,1)
for f in
range
(len
(variances_train)):
features_train[i,f]
= np.log(variances_train[f]
)
csp = features_train[0,
:2]
pycharm下的多個python版本共存(二)
選擇版本可以在建立專案的時候進行,也可以在設定中進行設定 開啟file default setting project interpreter 在右側介面的設定圖示處單機add local。然後選擇python2或者3的可執行檔案 python.exe 目錄。新增完兩個版本後 之後就可以選擇乙個然後...
python中的命名空間
命名空間就是存放變數名和函式名的空間。如果你想訪問乙個變數值,必須先訪問對應的命名空間,拿到名字和對應記憶體位址的繫結關係。1 內建命名空間 python提前定義好的名字,就是存在於內建命名空間 2 全域性命名空間 存放於檔案級別的名字,就叫做全域性命名空間 在全域性空間下 if while for...
python命名空間列印 python的命名空間
定義 名稱到物件的對映。命名空間是乙個字典的實現,鍵為變數名,值是變數對應的值。各個命名空間是對立沒有關係的,乙個命名空間中不能有重名,但是不同的命名空間可以重名且沒有任何影響。分類 python程式執行期間會有2個或3個活動的命名空間 函式呼叫時有3個,函式呼叫結束後2個 按照變數定義的位置,可以...