Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C#开发者'理解MatLab数组裁剪和运算符;s的观点:例如数据(1:4:end,:,:);_C#_Matlab_Multidimensional Array - Fatal编程技术网

从C#开发者'理解MatLab数组裁剪和运算符;s的观点:例如数据(1:4:end,:,:);

从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

我正在尝试在.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]
),但我不知道第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,这是我们的边界,因此它被丢弃。无论出于何种目的,这都是访问最后一个元素或原始(未反转)数组的可靠方法。

中和中的文档都介绍了这一点