关于MATLAB的线性索引问题

简介

MATLAB提供了强大的数据操作能力,使得我们可以任意的处理我们的数据。
但是也有一些功能不方便之处, 比如在python里面,你可以
在上面的python代码中,我们创建一个随机的二维矩阵,通过括号索引,我们可以访问该数组的第0行第2列的元素和第2行第4列的元素
那么在MATLAB里面同样的操作,会是什么效果呢?
arr = randi([0, 10], 3, 5)
arr =
10 1 2 10 2 6 2 8 3 6 1 9 2 2 5
row = [1, 3]
row =
1 3
col = [2, 4]
col =
2 4
arr(row, col)
ans =
1 10 9 2
我们看到并没有实现我们所要的效果, 程序把第1行第3行和第3列第4列的数据全部提取出来了
一般的做法是这样
idx = sub2ind(size(arr), row, col)
idx =
4 12
arr(idx)
ans =
1 2

问题

还有一种解决方案是,我们自己创建一个数据类型,实现同样的功能
假设我们要实现的这个数组类型名字是subdoublearray, 它接受double型的矩阵作为输入
可以实现和python同样的索引功能
在附件中,我们给出了p文件,需要实现下面的功能, 附件中我们给出了测试文件,test_subdoublearray.m 作为程序是否满足要求的测试文件
A = [1 2 3
4 5 6
7 8 9];
B = subdoublearray(A);
y = B([1 3],[3 1])
y =
3 7
y_correct = [3 7]
y_correct =
3 7
下面轮到你了,have fun!

评价标准

  1. 需要通过测试文件
  2. 在满足1的条件下,按照size大小排序
size的计算方法如下:
调用calculateSize函数
calculateSize('subdoublearray.m')
ans =
54