在matlab中, 有n個向量(m維)的矩陣mat(n, m)
要計算任兩個向量間的距離, 即距離矩陣, 可使用以下的並行演算法以加速:
#include #include #include #include using namespace std;//提前定義執行緒數
const int nthreads = 4;
//全域性變數
int rows, cols, nrow, nw;
double *invals, *outvals;
//執行緒執行體定義
void calc(int start, int end)
outvals[no + 2 * nrow] = sum;
}}void mexfunction(int nlhs, mxarray *plhs, int nrhs, const mxarray *prhs)
//指標指向輸入資料
invals = mxgetpr(prhs[0]);
//輸入矩陣的行數和列數
rows = mxgetm(prhs[0]);
cols = mxgetn(prhs[0]);
//結果的行數nrow
//結果的列數nw=(i, j, distance)
nrow = (rows * rows - rows)/2, nw = 3;
//分配結果記憶體
nlhs = 1;
plhs[0] = mxcreatedoublematrix(nrow, nw, mxreal);
outvals = mxgetpr(plhs[0]);
//在結果中分配i和j的組合
int curl = 0;
for(int i = 0; i < rows - 1; i++)
for(int j = i + 1; j < rows; j++)
//按執行緒數分配計算區間
int seg = nrow / nthreads;
//執行緒陣列
thread threads[nthreads];
//分配每乙個執行緒的計算區間,避免衝突
for(int i = 0; i < nthreads; i++)
//等待全部執行緒結束
for (int i = 0; i < nthreads; i++)
}
mex adjmat.cpp
matlab中簡單測試:
tic; x = rand(5000, 50);
adjmat(x);
toc筆記本測試時間約:
0.57s
Matlab計算矩陣間距離
夜深人靜時分,宿舍就我自己,只有蚊子陪伴著我,我慢慢碼下這段文字.我們倆交流了很多.從實驗室,到研究課題,到lol,筆者深深為他淵博的學識和不俗的談吐所打動,恩恩,遇到志同道合的人挺不容易的.最重要的是感謝他的開源精神,給我了很多我急需的資料和 在此,也感謝提供的這個平台,讓我們在這茫茫人海中有了相...
Matlab中,稀疏矩陣特徵值與特徵向量求解問題
矩陣有兩種表示方法 1 普通矩陣形式 a full 2 座標與數值對的形式 a sparse。對第一種矩陣形式,可用 v,d eig a full 其中v是特徵向量矩陣,d是特徵值矩陣。對第二種矩陣形式,可用 d eigs a sprase,k 其中,d為矩陣a的前k個最大特徵值 預設為6 但是,這...
matlab關於特徵值 特徵向量的技巧
在作業中需要求某個矩陣的特徵值和特徵向量,當然同學們都會使用 matlab 內建的函式 v,d eig a 這樣得到的對角矩陣 d 其對角線元素就是從小到大排列的的特徵值。有的同學希望能將這個對角線元素單獨抽取出來變成乙個行向量或者列向量,還希望特徵值從大到小排列,為了達到這個目的,大家用了各種各樣...