matlab 矩阵矢量化编程

创建对角对阵

根据向量创建对角矩阵:

>> diag([1/2 1/3 1/4])
ans =
    0.5000         0         0
         0    0.3333         0
         0         0    0.2500

diag有多份重载,

  • (1)根据一维向量创建对角矩阵
  • (2)提取矩阵的对角线元素为一维向量(列向量)

找不同

function a = sigmoid(z) a = 1/(1+exp(-z));
end

function a = sigmoid(z) a = 1./(1+exp(-z));
end

二者唯一的不同正在于,做除法运算时,上边的函数没有点,下边的函数有点,这就导致了,第一个函数不可以接受向量或者矩阵,而第二个函数可以。

Rosenbrock function

f(x)=i=1N1100(xi+1x2i)2+(1xi)2wherex=[x1,,xN]RN

f = sum(100*(x(2:end)-x(1:end-1).^2).^2+(1-x(1:end-1)).^2);

三维矩阵的索引

patches = zeros(patchSize*patchSize, numPatches);
for i = 1:numPatches,
    rnd_patch = images(row_idx(i):row_idx(i)+patchSize-1, col_idx(i):col_idx(i)+patchSize-1, img_idx(i));
    patches(:, i) = rnd_patch(:);
end

改造为矢量形式:

patches = reshape(images(row_idx:row_idx+patchSize-1, col_idx:col_idx+patchSize-1, img_idx), patchSize*patchSize, numPatches);

你可能感兴趣的:(matlab 矩阵矢量化编程)