有没有一种有效的方法在Matlab中声明一个非常大的矩阵(比如说40.000.000x10)的整数? 如果我这样做:
var=uint8(zeros(40000000,10));
它在命令窗口中运行良好。 但是相同的代码在功能上工作得更糟!如果我在函数中的某处执行此操作,它首先会创建一个40.000.000x10的双精度矩阵,然后将其转换为8位整数矩阵。我更喜欢它是从最开始创建的整数矩阵,如在命令窗口中。我必须处理更大的矩阵,并且当它初始化这样的双精度矩阵时我用尽了RAM(尽管如果将矩阵初始化为整数则会有足够的内存)。而且我在这里并不需要双打,所有数字都在0:100范围内。 希望你能理解这个问题:D
答案 0 :(得分:5)
var = zeroes(40000000,10, 'uint8')
答案 1 :(得分:0)
也许你应该使用它,这样效率更高。
var = zeros(40000000, 10, 'uint8');
答案 2 :(得分:0)
如果您想要有点棘手并节省少量时间,可以这样分配uint8
零的数组:
var(40000000,10) = uint8(0);
有关此类预分配的详细信息,请参阅here。小心这个方案。如果将var
分配为一个大小然后再次分配它而不使用此方法将其清除为较小大小的数组,则大小实际上不会更改,并且数据不会被清零。从本质上讲,如果数组(此处var
)尚不存在,此方案才有用。