从C#开发人员的角度了解MatLab数组裁剪和运算符:数据(1:4:结束,:,:);

时间:2018-07-29 18:25:49

标签: 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 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])中的3D浮点数组中,但是我不知道第1行和第2行的作用,也不了解如何实现相同的“重采样”和“旋转”技术C#中的3D浮点数组。尽管我对:运算符endMatLab matrices and arrays进行了研究。任何帮助是极大的赞赏。

1 个答案:

答案 0 :(得分:0)

data = data(end:-1:1,:,:);            %line 1

裁剪data数组; end关键字仅指向轴的最后一个元素。然后,逐步调整大小并停止:start:stepsize:stop 然后,第一行向后切data,从最后一个元素end开始,按步长递增(在这种情况下为-1),然后查看相应的元素(end + (-1)),一直到终止元素1:本身的意思是“全部”。 因此,第1行只是颠倒了第一个轴元素的顺序,并将其恢复为data

resampledData = data(1:4:end,:,:);    %line 2

根据与上述相同的规则,对新的data数组进行切片(在line1中保存)。根据{{​​1}}的{​​{1}}表示它一直查看第一个元素,第五个元素,第九个,依此类推,一直到最后一个元素。第二轴和第三轴上的所有元素都不会发生任何改变。

插图:

1:4:end

为什么不只是从头开始将其切成start:stepsize:stop呢? 如您所见,最后一步(4-4)的其余部分= 0,这是我们的界限,因此将其丢弃。无论我打算做什么,这都是访问最后一个元素或原始(未反转)数组的可靠方法。