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

时间:2016-02-14 10:45:16

标签: excel matlab for-loop ascii

我有100 x 101的数据。我想将它们串联转换,例如对于第一行所有列数据,然后对于第二行所有列数据,依此类推。这意味着结果只有三列。第一列包含行号,第二列包含列号,第三列包含相应行和列的值。

请你帮我在MATLAB中进行这种转换。

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

2 个答案:

答案 0 :(得分:1)

这可以通过find

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

请注意,这是非常低效的,因为您要存储3个值,您只需要存储1(元素的实际值)。要访问特定元素,例如第31行第43列,只需执行A(31,43),即可为矩阵编制索引。

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

whos
  Name          Size              Bytes  Class     Attributes

  A           100x101             80800  double              
  data      10100x3              242400  double              

答案 1 :(得分:1)

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

@Configuration
@EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class })
public class MongoConfig{
}

时间的输出如下:

经过的时间是0.002130秒(第一种方法)

经过的时间是0.000525秒(第二种方法)。