matlab 编程——一些细节、常犯错误的汇总

行向量+列向量

>>> x = [1, 2, 3]
>>> y = x'
>>> x+y

ans = 

    2 3 4
    3 4 5
    4 5 6

这里matlab也会对不同size的矩阵之间进行broadcast操作:

x       size == 1 * 3   
y       size == 3 * 1
result  size == 3 * 3

对x在列的方向多复制二行,对y在行的方向多复制两列
1, 2, 3             1,  1,  1,          2,  3,  4
1, 2, 3     +       2,  2,  2,      =   3,  4,  5
1, 2, 3             3,  3,  3           4,  5,  6

*与.*

在仿真标准高斯函数时:

x = -5:.01:5;
plot(x, gauss(x))

也就是需要gauss()函数接受向量类数据:

function [y] = gauss(x)
y = 1/sqrt(2*pi)*exp(-x*x/2)

运行第一段代码会提示如下错误:

错误使用  * 
内部矩阵维度必须一致。

x是向量类型,也即是一种特殊的矩阵,乘法运算要符合矩阵运算规则,在matlab中对*.*有着严格的区分。前者*要符合矩阵乘法的运算,也即左操作数的列==右操作数的行,后者是按位相乘运算(element-wise),元素的个数相等即可。

显然此时的gauss()函数可做如下的修改:

function [y] = gauss(x)
y = 1/sqrt(2*pi)*exp(-x.*x/2)
x=-5:.01:5;
plot(x, gauss(x))


这里写图片描述

创建图像块矩阵

创建图像块组成的矩阵,逐点遍历其 r×r 邻域时,为后续处理的方便(matlab环境下的接口往往以列的方式实现),应以列序优先,按列遍历。

I = imread('./lena.png');
[m, n] = size(I);
r = 5; sz = floor(r/2);
I_pad = padarray(I, [sz, sz], 'symmetric', 'both');
% 镜像填充,避免边缘的影响
P = zeros(m*n, r^2);
idx = 1;
for j = (sz+1):(n+sz),
    for i = (sz+1):(n+sz),
        t = I_pad(i-sz:i+sz, j-sz:j+sz);
        t = t(:)';
        P(idx, :) = t;
        idx = idx+1;
    end
end
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值