Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
Excel 如何将矩阵数据转换为列?_Excel_Matlab_For Loop_Ascii - Fatal编程技术网

Excel 如何将矩阵数据转换为列?

Excel 如何将矩阵数据转换为列?,excel,matlab,for-loop,ascii,Excel,Matlab,For Loop,Ascii,我有100x101的数据。我想将它们按系列转换,例如,对于第一行所有列数据,然后对于第二行所有列数据,等等。这意味着结果将只有三列。第一列包含行号,第二列包含列号,第三列包含相应行和列的值 你能帮我在MATLAB中做这个转换吗 可用数据为ASCII格式,可以在MATLAB和Excel中打开。这可以通过以下方式完成: 请注意,这是非常低效的,因为您只需要存储1(元素的实际值)就可以存储3个值。要访问特定元素,比如第31行第43列,只需执行a(31,43),在这里对矩阵进行索引 data的文件大小确

我有
100x101
的数据。我想将它们按系列转换,例如,对于第一行所有列数据,然后对于第二行所有列数据,等等。这意味着结果将只有三列。第一列包含行号,第二列包含列号,第三列包含相应行和列的值

你能帮我在MATLAB中做这个转换吗

可用数据为ASCII格式,可以在MATLAB和Excel中打开。

这可以通过以下方式完成:

请注意,这是非常低效的,因为您只需要存储1(元素的实际值)就可以存储3个值。要访问特定元素,比如第31行第43列,只需执行
a(31,43)
,在这里对矩阵进行索引

data
的文件大小确实是
A
的三倍:

whos
  Name          Size              Bytes  Class     Attributes

  A           100x101             80800  double              
  data      10100x3              242400  double              
这可以通过以下方式实现:

请注意,这是非常低效的,因为您只需要存储1(元素的实际值)就可以存储3个值。要访问特定元素,比如第31行第43列,只需执行
a(31,43)
,在这里对矩阵进行索引

data
的文件大小确实是
A
的三倍:

whos
  Name          Size              Bytes  Class     Attributes

  A           100x101             80800  double              
  data      10100x3              242400  double              
在这种情况下,您可以使用更快、更有意义的功能:

tic
A = rand(100,101);
[data(:,1), data(:,2), data(:,3)] = find(A);
data = sortrows(data,[1 2]);
toc

tic
B = A' ;
[data_B(:,1), data_B(:,2)] = ind2sub(size(B), 1:length(B(:)));
data_B(:,3) = B(:);
toc
正时的输出如下所示:

运行时间为0.002130秒(第一种方法)

运行时间为0.000525秒(第二种方法)

在这种情况下,您可以使用更快、更有意义的功能:

tic
A = rand(100,101);
[data(:,1), data(:,2), data(:,3)] = find(A);
data = sortrows(data,[1 2]);
toc

tic
B = A' ;
[data_B(:,1), data_B(:,2)] = ind2sub(size(B), 1:length(B(:)));
data_B(:,3) = B(:);
toc
正时的输出如下所示:

运行时间为0.002130秒(第一种方法)


运行时间为0.000525秒(第二种方法)

我删除了有关附加文件的文本,因为没有附加文件。我在回答中提供的代码将为您进行此转换,前提是您将数据加载到MATLAB中的矩阵中。你到底为什么要这么做?这是非常低效的,因为你只存储了3个数字,而不是1个,没有额外的信息。我删除了有关附加文件的文本,因为没有附加文件。我在回答中提供的代码将为您进行此转换,前提是您将数据加载到MATLAB中的矩阵中。你到底为什么要这么做?它的效率非常低,因为您只存储了3个数字,而不是1个,并且没有额外的信息。@R.Bergamote不,这就是我使用
sortrows
的原因
find
以列主顺序工作,因此我将其排序为行主顺序。@R.Bergamote不,这就是我使用
sortrows
的原因
find
以列主顺序工作,因此我对它进行了排序,使其成为行主顺序。