我有100 x 101
的数据。我想将它们串联转换,例如对于第一行所有列数据,然后对于第二行所有列数据,依此类推。这意味着结果只有三列。第一列包含行号,第二列包含列号,第三列包含相应行和列的值。
请你帮我在MATLAB中进行这种转换。
可用数据采用ASCII格式,可以在MATLAB和Excel中打开。
答案 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秒(第二种方法)。