数值运算和矩阵运算
数值运算
%% 算数运算
sqrt
power(8,1/3)
log(1,5) %e
log10(1,5) %10
exp(2) %e为底的指数
expm1(2) %=exp(x)-1
nextpow2(20) %寻找最大的n,使得2*(n-1)小于该值 ans=5
disp(x)%输出相当于printf
sin(pi)%写成sinpi(1)
asin(1/2) %反正弦 弧度制
asind(1/2) %反正弦 角度制
atan2(1,-1) %四象限反正切
mod(17,4) %求余数
sign(-1) %符号函数 负数保持不变 正数为一 0为0
fix (1.1072)%向0取整
floor (1.1072) %向负无穷取整
ceil(1.1072) %向正无穷取整
round(1.1072) %直接四舍五入
roundn(1.1072,-2) %-2是小数点后两位
max ([])
min ([])
mean ([]) %平均值
median ([]) %中位数
prod ([]) %求积
sum ([])
var ([]) %方差
std ([]) %标准差
cov ([]) %协防差
%生成随机数
rand(1) %生成0-1的随机数
rand(1)*100+20 %生成20-120的随机数
randi(100) %生成0-100的随机整数
矩阵运算
%%矩阵运算
1 : 1 : 100 % 1间隔2到100
[3,4]
[1 2 3] %矩阵相当于行矩阵
[1,2,3] %行矩阵
[1;2;3] %列矩阵
[1,2,3;4,5,6;7,8,9] %有行有列
zeros(10) %创建10x10全是0的矩阵
zeros(10,20) %创建10x20全是0的矩阵
eye(10)%创建10x10的单位 全对角线为1
magic(10)%创建10x10的幻方
rand(10)%创建10x10的均匀分布随机矩阵(0~1的范围)
3*rand(10)%创建10x10的均匀分布随机矩阵(0~3的范围)
randn(10)%创建10x10的正态分布随机矩阵(0~1的范围)
randperm(10,5) %在1-10范围内随机取5个整数
[xx,yy]=meshgrid(1:100,1:5);%基矩阵
repmat(rand(10),1,5)%扩充矩阵
[m, n]=size(matrix); %得到矩阵的行数和列数
m1 = size(matrix,1); %得到矩阵的行数
n1 = size(matrix,2); %得到矩阵的列数
n2 = length(matrix); %得到矩阵的行数和列数的较大数
num1 = matrix(1,3) %取出矩阵得第一行,第三列
num2 = matrix(1,:) %取出矩阵得第一行
num3 = matrix(:,1) %取出矩阵得第一列
%多行多列选取
label=[1,3];
num4 = matrix(:,label) %取出矩阵得第一列和第三列
A*B
A/B %A乘B的逆
A\B %A的逆乘B
A.*B %数乘
A./B %右数除
A.\B %左数除
inv %求逆
pinv %求伪逆(适用于非方阵)
A' %转置
det(A)
trace(A)
lu(A)
qr(A)
eig(A) %求特征值
数据的导入
%% readexcel
data_table = xlsread("食品零售价格.xls");
%% 读不了文本数据
data_table2 = readmatrix("食品零售价格.xls");
%% 基本上数据保留比较全/table的形式
data_table3 = readtable("食品零售价格.xls");
%% 元胞的形式
data_table4 = readcell("食品零售价格.xls");
%% load导入命令
load("食品零售价格.xls");
矩阵的逻辑处理
%% 不管是什么数据,都要转化为矩阵形式
data = data_table3(:,3:end); %所有行/第三列到最后一列%仍然是table的形式
data1 = table2array(data); %table-> double(矩阵)
%% 求最大值 最小值 平均值
data_max = max(data1); %注意这里求的是每一列得最大值 %求行的时候要进行转置(data')
%% 求不为0的次数位置
% ~(不等于) = == > < = >= <=
data_shang1 = data1(1,:);%第一行的数据
index1 = find(data_shang1~=0);%找到不为0的位置
num_index1 = length(index1); %找到不为0的次数
data_shang1(index1);
%% 循环
data_shangall = zeros(1,size(data1,1));
for i = 1:size(data1,1)
data_shang1 = data1(i,:);
index1 = find(data_shang1 ~=0);
num_index1 = length(index1);
data_mean = mean(data_shang1(index1));%求平均值
data_shangall(i) = num_index1;
end
%% 找到矩阵的缺失值并删除所在行或列
index = isnan(data_nan); % 最后生成logical变量 (NaN变成1,正常的变成0)
data_nan1 = data_nan;
data_nan1(index1,:) = []; %赋值为空
%% 分布找出类属于A,B,C 的数据,存储起来
%% 将文字标签改为数字标签
data_abc = data_table1(:,2);%将第二列取出来 data_table1(2,:);%第二行
data_abc_num = table2array(data_abc);%表文件转化为cell
%%
data_tongji = tabulate(data_abc_num);% 统计ABC个数
for i = 1:size(data_tongji,1)
dianli_str{1,i} = data_tongji{i,1};
end
%%
data_shuju = zeros(length(data_abc_num),1);
for NN = 1:length(dianli_str)
idx = find(ismember(data_abc_num,dianli_str{1,NN}));%寻找文字变量的位置
data_shuju(idx)=NN;
end
%讲ABC找出来
for i = 1:size(data_tongji,1)%讲不同标签行的位置分别找出来存在不同的元胞里,因为
A(i)={find(data_shuju == i)};
end
%% 对cell里的数据进行同样的处理
% 标准化 zescore
std_data = zscore(data1);%对矩阵每列进行标准化
%%
std_data1 = mapminmax(data1',0,1)'; %mapminmax对每行进行标准化,操作的时候
%% 如果对B类数据进行标准化
B_data = data1(A{1,1},:);
std_B_data = zscore(B_data);
A{2,1} = std_B_data;
%批量操作
for i = 1:length(A)
B_data = data1(A{1,i},:);
std_B_data = zscore(B_data);
C{1,i} = std_B_data;
end
%%
for i = 1:size(data1,1)
data_te = data(i,:);
data_mean = mean(data_te);
data_std = std(data_te);
index = find((data_te>(data_mean+3*data_std))|(data_te<(data_mean-3*data_std)));
AA{i} = index;
end
%%
data1([1,4,5],:) = [];