一直以为matlab中没有动态数组,或者类似C++的vector容器的数据结构。其实不然,matlab的数组就是一个动态数组,它可以当作vector,或者队列等数据结构使用。
array = 1:10;
array =
1 2 3 4 5 6 7 8 9 10
array(1) = [];
array =
2 3 4 5 6 7 8 9 10
array(end) = [];
array =
2 3 4 5 6 7 8 9
array(end+1) = 10;
array =
2 3 4 5 6 7 8 9 10
上面的例子可以看出,只要令数组的某一个元素为[],就相当于删除了数组中该元素。array(1) = [] 这条语句,就类似于队列的pop()操作,array(end) = [] 相当于堆栈的pop()操作,而array(end+1) = 10 就相当于push()操作。
2. 数组的一些操作技巧
2.1 在数组中找到某个特定元素的索引
a = [1 2 3 3 4 5];
i = find(a==3)
2 3
2.2 数组切片
a = [1 2 3 4 5 6];
a(2:4)
ans =
2 3 4
a(a>3)
ans =
4 5 6
二维数组切片
mat =
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
>> mat(2:3, 1:2)
ans =
21 22
31 32
>> mat(mat(:,1)>30, :)
ans =
31 32 33 34
41 42 43 44
一直以为matlab中没有动态数组,或者类似C++的vector容器的数据结构。其实不然,matlab的数组就是一个动态数组,它可以当作vector,或者队列等数据结构使用。array = 1:10;array = 1 2 3 4 5 6 7 8 9 10array(1) = [];array = ...
第一步,设置总的一个function,该function名称和文件名称一样。
第二步,在该文件中可以任意添加许多小函数,用@符号链接过去即可。
第三步,调用的时候,定义总函数,然后用 . 符号关联到小函数即可。
实现堆栈为例
function stack = stackFuns
stack.pushStack = @pushStack;
stack.popStack = @popSt
我的需求是一个可以动态改变大小的三维数组,但是
matlab要求三维数组每页大小必须相等(类比二维数组每行的列数必须相等),于是需求不能实现,决定用cell来代替
1 元胞示例
例:我要存五个二维数组:
[1 2;3 4]、[1 2 3 ;4 5 6]、[1 2 3 4;5 6 7 8]、[1 2 3 4 5;6 7 8 9 0]、[1;2]
>> c=cell(1,5)
1×5 cell 数组
[] [] [] [] []
虽然从政治正确的角度看,是不推荐使用Matlab了。无奈老代码已经在Matlab上存活太久了。
本文是为了解决Matlab官方库中没有队列数据结构,故从社区中找了段代码。这也是自己首次在Matlab中使用面向对象的编程。语法说明见Matlab官方文档和本文最后的参考链接。
classdef myQueue <handle
properties (Access = public)%private
buffer % a cell, to maintain the dat
这些文件在 matlab 中实现了列表、队列、堆栈数据结构,队列和堆栈比 java 的替代方案要快一点。
CStack 定义一个栈数据结构
它喜欢 java.util.Stack,但是,它可以使用 CStack.content() 来返回堆栈的所有数据(在单元格中),并且速度更快比java的堆栈。
s = CStack(c); c 是一个单元格,可以省略s.size() 返回元素的数量s.empty() 返回栈是否为空s.push(el) 将 el 推到栈顶s.pop() 弹出栈顶,返回元素s.top() 返回栈顶元素s.remove() 移除栈中的所有元素s.content() 返回栈的所有数据(以a的形式) 大小为[s.size(),1]的像元
CQueue 定义一个队列数据结构
它喜欢 java.util.Queue,然而,它可以使用 CQueue.content() 来返回队
今天很不开心,因为用matlab实现之前自己c++中实现的一部分代码,需要用到几种数据结构,比如图,队列,一时间不知如何下手,几番来回思考,完美的解决了这个问题
1.关于图
图是一种表示节点之间拓扑关系的数据结构,常用的表示方法有邻接矩阵和邻接表,邻接矩阵是空间换时间的做法,鉴于计算机内存的飞速发展,以及我也比较懒,所以就直接在matlab中声明一个
graph = zeros(totalNu...
在 MATLAB 中声明动态数组可以使用以下两种方法:
1. 使用 MATLAB 的内置函数 `zeros()`,`ones()` 和 `rand()` 来声明动态数组,例如:
a = zeros(1, 10); % 声明一个 1 行 10 列的全零数组
b = ones(3, 5); % 声明一个 3 行 5 列的全一数组
c = rand(2, 3); % 声明一个 2 行 3 列的随机数数组
2. 使用 MATLAB 的 `[ ]` 运算符来声明动态数组,例如:
d = [1, 2, 3, 4, 5]; % 声明一个行向量
e = [1; 2; 3; 4; 5]; % 声明一个列向量
f = [1, 2, 3; 4, 5, 6; 7, 8, 9]; % 声明一个 3 行 3 列的矩阵
需要注意的是,在 MATLAB 中,数组的下标是从 1 开始的。