一直以为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 开始的。