1.给定N和A,N是一个整数,A是一个向量,例如N=3,A=[4 5 6 7],将A中的每一个元素重复N次,然后形成一个向量:
示例:
B=
4 4 4 5 5 5 6 6 6 7 7 7
代码:
N=3;A=[4 5 6 7] B=A(ones(1,N),:); %ones(1,N):生成一行N列的全为1 的向量 B(:)' % A([1 1],:)是将A的行向量重复两遍
结果:
2.假设x是一个向量,例如x = [4 4 4 5 6 6 7 7 8 8 8 8],现在想要得到如下向量
l = [2 3 1 2 4]; %每个元素的重复的个数
v = [4 5 6 7 8]; %重复元素的值
代码:
x = [4 4 4 5 6 6 7 7 8 8 8 8] i = [find(x(1:end-1) ~= x(2:end)) length(x)] l = diff([0 i]) %求差分:后减前 v = x(i) %解释: x(1:end-1) %取x中的去掉最后一个的所有 思路:差分之后,等于0的说明相同,不等于0说明不同。
结果:
例如:
l = [2 3 1 2 4];
v = [4 5 6 7 8];
求x
代码:
l = [2 3 1 2 4]; v = [4 5 6 7 8]; i= cumsum([1 l]) %累计求和 j = zeros(1,i(end)-1) j(i(1:end-1)) = 1 x = v(cumsum(j))
结果:
求建立以下table数组
table N date cross oddnum evenum
行编号
2017年每天的日期,datetime格式
日期为单,“单号通行”,日期为双,“双号同行”。周末“单双同行”
当前日期单号车一共通行多少天
当前日期双号车一共通行多少天
%代码:
clc; clear; NDays = yeardays(2021); N = [1:NDays]'; %NDays = yeardays(2021) date = datetime(2021,1,1)+N-1;%生成这一年的日期数组 cross = repmat('单号通行',NDays,1); a = logical(mod(date.Day,2)); %日期是否为单,mod()求余 cross(~a,:) = repmat('双号通行',sum(~a),1);%~a取反 tf = isweekend(date); cross(tf,:) = repmat('单双通行',sum(tf),1); idoddnum = all(cross == '单号通行',2 )|all(cross == '单双通行',2); idevenum = all(cross == '双号通行',2 )|all(cross == '单双通行',2); Noddnum = cumsum(idoddnum); Nevenum = cumsum(idevenum); CrossDate = table(N,date,cross,Noddnum,Nevenum)
结果: