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
以列主顺序工作,因此我对它进行了排序,使其成为行主顺序。