从C#开发者'理解MatLab数组裁剪和运算符;s的观点:例如数据(1:4:end,:,:);
我正在尝试在.NET中重新创建一个MatLab脚本。我看到的具体代码如下:从C#开发者'理解MatLab数组裁剪和运算符;s的观点:例如数据(1:4:end,:,:);,c#,matlab,multidimensional-array,C#,Matlab,Multidimensional Array,我正在尝试在.NET中重新创建一个MatLab脚本。我看到的具体代码如下: raw = fread(fid, [160*4 304*304], 'float32'); % read in raw data = reshape(raw, [160*4 304 304]); % reshape matrix into 3D data = data(end:-1:1,:,:); % To rotate the data into orientation in accordance to Matlab
raw = fread(fid, [160*4 304*304], 'float32');
% read in raw
data = reshape(raw, [160*4 304 304]);
% reshape matrix into 3D
data = data(end:-1:1,:,:); % To rotate the data into orientation in accordance to Matlab common use
resampledData = data(1:4:end,:,:);
我试图理解的是:
data = data(end:-1:1,:,:); %line 1
resampledData = data(1:4:end,:,:); %line 2
我已经将二进制文件读入C#中的三维浮点数组(float[160,304,304]
),但我不知道第1行和第2行是做什么的,也不知道如何对C#中的三维浮点数组实现相同的“重采样”和“旋转”技术。尽管我研究了:
操作符、end
,以及。非常感谢您的帮助
data = data(end:-1:1,:,:); %line 1
裁剪数据
-数组;end
关键字只指向轴的最后一个元素。然后是步长和停止:start:stepsize:stop
第一行然后向后切片数据
,从最后一个元素开始结束
,增加步长(-1
,在本例中),并查看相应的元素(结束+(-1)
),一直到停止元素,在本例中为1
)<代码>:本身表示“全部”。
因此,第1行只是反转第一个轴元素的顺序,并将其恢复为数据
resampledData = data(1:4:end,:,:); %line 2
根据与上面相同的规则对新的数据
数组进行切片(重新保存在line1
)<代码>1:4:end
根据开始:步长:stop
表示它查看第一个元素、第五个元素、第九个元素,依此类推,直到最后一个元素。第二轴和第三轴中的所有元素都不会以任何方式改变
说明:
>> test=transpose([1:1:20]) %transpose() for illustration purpose, it doesn't
%change the behavior of the slicing operations
array =
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>> reverse_array = array(end:-1:1)
reverse_array =
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
>> every_fourth = reverse_array(1:4:end)
every_fourth =
20
16
12
8
4
为什么不从一开始就把它向后切成(end:-4:1)
?
如您所见,最后一步(4-4)的剩余部分=0,这是我们的边界,因此它被丢弃。无论出于何种目的,这都是访问最后一个元素或原始(未反转)数组的可靠方法。中和中的文档都介绍了这一点