matlab错位相减,matlab随手记
矩陣展開
>> B=[1;3]
B =
1
3
>> C=kron(B,[1,1,1])
C =
1 ? ? 1 ? ? 1
3 ? ? 3 ? ? 3
使用imshow繪制圖片到到指定坐標
% 產生新的圖像顯示框 hAxe=axes('Parent',gcf,... % 設置新的axe, 將'parent' 屬性設置為當前窗口gcf ? ? 'Units','pixels',...??%設置單位為pixels ? ? 'Position',[30 80 605 705]);??% 指定axe的位置,格式為[left bottom width height], left和bottom設定了axe的左下 %角坐標,width和height設定了窗口的寬度和高度 %選定hAxe為當前axe axes(hAxe); %顯示圖像 imshow(...)
unique的實現
matlab里面的unique是通過排序后錯位相減的方式實現的 充分利用了矩陣運算的性質 灰常巧妙啊!!!
尋找矩陣中某向量~
比如有矩陣A=[ 1 1 1;
2 2 2;
3 3 3;
4 4 4;]
行向量B=[3 3 3]
則: B在A的第??3 行
請問:怎么自動求出B在A的哪一行呢?
方法1:
——————————————————
for i=1:3
if (A(i,:)==B)
Position=i;
end
end
——————————————————
方法2:
——————————————————
find(ismember(A,B,'rows'));
——————————————————
ismember函數:
tf = ismember(A, S)返回一個和A同樣長的數組,當A中元素是集合S中的元素時,返回邏輯1(真),否則為0。在集合論方面,k為1當A屬于S。輸入參數A和S可能是數值型或者字符型數組或者字符型元胞數組。?www.iLoveMatlab.cn
tf = ismember(A, S, 'rows')
當A和S為矩陣并且列數相同時,當A中的行同時也是S中的行時返回1,否則返回0。
如果A或S是字符元胞數組時不能用此語法。
[tf, loc] = ismember(A, S, ...)
返回一個包含A中的元素也是S種元素的最大索引。對于A中元素不出現S里面的,ismember返回0.
matlab 矩陣變向量
reshape
A=A(:)
后面這個真是神奇!
畫矩形
line(rectx(:),recty(:));
rectx recty 為五維向量 代表五個點 ABCDA
-------------------------------------------------------------------------------------------------------------------------------------
關于下標索引
matlab以數組為基本處理單元,這是其特色,也支持靈活的矩陣下標索引也就是矩陣元素訪問,包括雙下標索引,線性索引,邏輯索引,冒號索引,數組索引等方式。
線性索引以列為單位對矩陣元素進行索引,通用的索引方式是A(B,C),這里B,C分別為矩陣A的行列下標組成的數組,可以是標量,向量及矩陣,其處理機制如下:將B,C分別按行進行向量化(將所有的列拼接成行向量相當于于reshape(A,
numel(A),1))成行向量vetor(B),vector(C),然后對這兩個向量索引
,也就是?A(B,C)=A(vetor(B),vector(C))。
A= reshape(1:12,3,4)
A =
1 ? ? ? ? ? ? ?4 ? ? ? ? ? ? ?7 ? ? ? ? ? ? 10
2 ? ? ? ? ? ? ?5 ? ? ? ? ? ? ?8 ? ? ? ? ? ? 11
3 ? ? ? ? ? ? ?6 ? ? ? ? ? ? ?9 ? ? ? ? ? ? 12
邏輯索引:
A(find(A>5))
ans =
6
7
8
9
10
11
12
線性索引:
A(7)
ans =
7
雙下標索引:
A(3,2)
ans =
6
冒號索引:
A(:,1)
ans =
1
2
3
數組索引:
——標量
A(1,:)
ans =
1 ? ? ? ? ? ? ?4 ? ? ? ? ? ? ?7 ? ? ? ? ? ? 10
——向量
A([1 2], [2 4])
ans =
4 ? ? ? ? ? ? 10
5 ? ? ? ? ? ? 11
——矩陣
B=[1 2 3; 3 2 1],C=[2 3;1 4]
B =
1 ? ? ? ? ? ? ?2 ? ? ? ? ? ? ?3
3 ? ? ? ? ? ? ?2 ? ? ? ? ? ? ?1
C =
2 ? ? ? ? ? ? ?3
1 ? ? ? ? ? ? ?4
A(B,C)
ans =
4 ? ? ? ? ? ? ?1 ? ? ? ? ? ? ?7 ? ? ? ? ? ? 10
6 ? ? ? ? ? ? ?3 ? ? ? ? ? ? ?9 ? ? ? ? ? ? 12
5 ? ? ? ? ? ? ?2 ? ? ? ? ? ? ?8 ? ? ? ? ? ? 11
5 ? ? ? ? ? ? ?2 ? ? ? ? ? ? ?8 ? ? ? ? ? ? 11
6 ? ? ? ? ? ? ?3 ? ? ? ? ? ? ?9 ? ? ? ? ? ? 12
4 ? ? ? ? ? ? ?1 ? ? ? ? ? ? ?7 ? ? ? ? ? ? 10
可以看出,除了邏輯索引和線性索引外,雙下標索引,冒號索引其實是數組索引的標量及向量特例,數組索引當下標為矩陣時又需進行向量化,這種向量化方式是按列進行的,這與線性索引的按列定址如出一轍,也就是Maltab盡管是以矩陣為基本處理(編程)單元,但其內部處理方式應該也是按列進行處理的(按列存儲數據)。
K-means聚類算法采用的是將N*P的矩陣X劃分為K個類,使得類內對象之間的距離最大,而類之間的距離最小。
使用方法: Idx=Kmeans(X,K) [Idx,C]=Kmeans(X,K)? [Idx,C,sumD]=Kmeans(X,K)? [Idx,C,sumD,D]=Kmeans(X,K)? […]=Kmeans(…,’Param1’,Val1,’Param2’,Val2,…)
各輸入輸出參數介紹:
X N*P的數據矩陣 K 表示將X劃分為幾類,為整數 Idx N*1的向量,存儲的是每個點的聚類標號 C K*P的矩陣,存儲的是K個聚類質心位置 sumD 1*K的和向量,存儲的是類間所有點與該類質心點距離之和 D N*K的矩陣,存儲的是每個點與所有質心的距離 […]=Kmeans(…,'Param1',Val1,'Param2',Val2,…) 這其中的參數Param1、Param2等,主要可以設置為如下: 1. ‘Distance’(距離測度) ‘sqEuclidean’ 歐式距離(默認時,采用此距離方式) ‘cityblock’ 絕度誤差和,又稱:L1 ‘cosine’ 針對向量 ‘correlation’?? 針對有時序關系的值 ‘Hamming’ 只針對二進制數據 2. ‘Start’(初始質心位置選擇方法) ‘sample’ 從X中隨機選取K個質心點 ‘uniform’ 根據X的分布范圍均勻的隨機生成K個質心 ‘cluster’ 初始聚類階段隨機選擇10%的X的子樣本(此方法初始使用’sample’方法) matrix 提供一K*P的矩陣,作為初始質心位置集合 3. ‘Replicates’(聚類重復次數)?? 整數
Empty cluster created at iteration XXX 是因為在分群的過程中有某些群落沒有分配到任何的輸入圖樣 最主要的原因在于各群的初始値設定不洽當 建議改進算法 或者設置kmeans遇到空群時的參數 默認參數是報錯 就是樓主遇到的 'emptyaction':'error'|'drop'|'singleton' 上面是3個可選參數,分別對應 報錯|丟棄空群|創建新群 如選用第2個參數可以這樣調用 kmeans(X,2,'emptyaction','drop') 當然 還有其他一些參數 可用命令 help? kmeans
總結
以上是生活随笔為你收集整理的matlab错位相减,matlab随手记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红外真空离心浓缩仪ZLNS-II
- 下一篇: 软件随想录:程序员部落酋长Joel谈软件