Matlab的高级用法和实用技巧

clc
clear
%% 记录元素在数组中出现的顺序
% 定义原始数组
original_array = [6 1 1 3 3 3];

% 创建一个大小和原始数组一样的零向量
counts = zeros(size(original_array));

% 遍历原始数组中的每个元素
for i = 1:length(original_array)
    % 计算该元素在原始数组中出现的次数
    counts(i) = sum(original_array(1:i) == original_array(i));
end

% 显示计算结果
newA=original_array*10+counts;

%% 生成1*40的元组
for i =1:40;
tuple{i}=i;
end

%% 扩展新数组
o_peiple_num = [1 2 2];
n = [1 2 3];
result = repelem(n, o_peiple_num);

%% 建立映射关系
% 定义两个数组
keyArray = [21 22 31];
valueArray = [4 2 6];

% 建立映射关系
mapObj = containers.Map(keyArray, valueArray);

% 测试映射关系
input = 21;
output = mapObj(input);
disp(output);

%% 员工做了什么工序
% 定义两个数组
employeeID = [1,2,3,1,2];
jobNumber = [11,21,31,12,22];

% 建立映射关系
jobMap = containers.Map('KeyType', 'double', 'ValueType', 'any');
for i = 1:length(employeeID)
    id = employeeID(i);
    job = jobNumber(i);
    if isKey(jobMap, id)
        jobs = jobMap(id);
        jobs(end+1) = job;
        jobMap(id) = jobs;
    else
        jobMap(id) = job;
    end
end

% 输出每个员工的工作情况
keys = jobMap.keys;
for i = 1:length(keys)
    id = keys{i};
    jobs = jobMap(id);
    fprintf('员工%d做了工序', id);
    for j = 1:length(jobs)
        fprintf('%d ', jobs(j));
    end
    fprintf('\n');
end

%% 保存元组到excel
% 定义元组
tuple = {[1 2],[],[5 6],[9 0]};

% 将元组转换为矩阵,每个子元素占据一行
mat = cell2mat(tuple');

% 创建 Excel 文件
filename = 'mytuple.xlsx';
if exist(filename, 'file') == 2
    delete(filename);
end

% 保存矩阵到 Excel 文件中的一个工作表中
xlswrite(filename, mat, 'Sheet1');

%% 保存元组到excel,元素长度不一致的情况
% 定义元组
tuple = {[1 2],[],[5 6],[9]};

% 将元组转换为表格
T = table(tuple.');

% 将表格写入 Excel 文件
writetable(T, 'tuple.xlsx', 'Sheet', 1);

%% 元组变成数组,末尾添加0
tuple = {[1 2],[],[5 6],[9]};

% 计算最大的元素长度
max_length = max(cellfun(@numel, tuple));

% 将每个元素转换为一行,不足部分用 0 填充
tuple_mat = cell2mat(cellfun(@(x) [x zeros(1, max_length - numel(x))], tuple, 'UniformOutput', false)');

%% 判断工作是否做完
% 定义矩阵 A 和 B
A = [11,12,13;21,22,23];
B = [11,12,13,0;21,11,22,23];

while true
    % 检查 B 的第一列,找到可以做的工序
    available_ops = B(:,1);  % 取出 B 的第一列
    available_ops = available_ops(~ismember(available_ops, A(:,1)));  % 去除 A 中已经完成的工序
    if isempty(available_ops)
        disp('所有工作已完成!');
        break;
    end

    % 找到可以做的工序后,从 A 中删除该工序
    A = A(~ismember(A(:,1), available_ops), :);
end

% 判断 A 是否为空矩阵
if isempty(A)
    disp('矩阵 A 已清空!');
end
%% 检查元素只存在第一列
% 创建一个矩阵
A = [1 2 3,1; 6 5 6,1; 7 8 9,1];
% 要查找的元素
x = 6;
% 使用 find 函数查找元素所在的行和列索引
[row_idx, col_idx] = find(A == x);
% 使用 unique 函数获取列索引的唯一值
unique_col_idx = unique(col_idx);
% 使用矩阵索引或列名来输出列名
col_names = [1, 2,3,4];
sum=sum(col_names(unique_col_idx));
if sum==1
        disp('只存在第一列');
    elseif sum==0
        disp('不存在矩阵中');
    else
        disp('不只存在第一列');
end




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

酿豆腐超级好吃

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

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

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

打赏作者

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

抵扣说明:

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

余额充值