我正在尝试在.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浮点数组。尽管我对:
运算符end
和MatLab matrices and arrays进行了研究。任何帮助是极大的赞赏。
答案 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,这是我们的界限,因此将其丢弃。无论我打算做什么,这都是访问最后一个元素或原始(未反转)数组的可靠方法。