Arrays 为什么要使用repmat()扩展阵列?

Arrays 为什么要使用repmat()扩展阵列?,arrays,performance,matlab,Arrays,Performance,Matlab,我想使用testread()将csv文件加载到Matlab,因为其中的数据有200多万条记录,所以我应该为这些数据预先分配数组 假设我不知道数组的确切长度,MatlabV6.5的文档建议我使用repmat()来扩展数组。文件原文如下: “如果无法预先分配,请查看是否可以增加 使用repmat函数调整数组大小。repmat会尝试获取 用于扩展阵列的连续内存块” 我真的不知道如何使用repmat进行扩展 这是否意味着通过估算repmat()预分配的大致长度,然后删除空元素 如果是这样,这与使用zer

我想使用
testread()
将csv文件加载到Matlab,因为其中的数据有200多万条记录,所以我应该为这些数据预先分配数组

假设我不知道数组的确切长度,MatlabV6.5的文档建议我使用
repmat()
来扩展数组。文件原文如下:

“如果无法预先分配,请查看是否可以增加 使用repmat函数调整数组大小。repmat会尝试获取 用于扩展阵列的连续内存块”

我真的不知道如何使用repmat进行扩展

这是否意味着通过估算
repmat()
预分配的大致长度,然后删除空元素


如果是这样,这与使用
zeros()
cell()
进行预分配有何不同?

文档还说明:

当您预先分配一块内存来保存某种类型的矩阵时 除了double之外,它的内存效率更高,而且有时更快 为此使用repmat函数

下面的语句使用零来预先分配 uint8。它首先创建一个完整的双精度矩阵,然后 然后将矩阵转换为uint8。这需要花费时间和内存 不必要的

A = int8(zeros(100));
使用repmat,您只创建了一个double,从而减少了内存 需要

因此,优势在于,如果您想要的数据类型不是double,那么可以使用repmat复制非double数据类型

另见:,其中建议:

data1(1000,3000) = 0
而不是:

data1 = zeros(1000,3000)
避免初始化其他元素

至于动态调整大小,
repmat
可用于简洁地将数组的大小增加一倍(这是一种常见的方法,会导致每个元素的摊销O(1)附加值):


是的,在收集完所有元素后,您可以调整数组的大小,以删除末尾的空元素。

文档还说明:

当您预先分配一块内存来保存某种类型的矩阵时 除了double之外,它的内存效率更高,而且有时更快 为此使用repmat函数

下面的语句使用零来预先分配 uint8。它首先创建一个完整的双精度矩阵,然后 然后将矩阵转换为uint8。这需要花费时间和内存 不必要的

A = int8(zeros(100));
使用repmat,您只创建了一个double,从而减少了内存 需要

因此,优势在于,如果您想要的数据类型不是double,那么可以使用repmat复制非double数据类型

另见:,其中建议:

data1(1000,3000) = 0
而不是:

data1 = zeros(1000,3000)
避免初始化其他元素

至于动态调整大小,
repmat
可用于简洁地将数组的大小增加一倍(这是一种常见的方法,会导致每个元素的摊销O(1)附加值):


是的,在收集完所有元素后,您可以调整数组的大小,以删除末尾的空元素。

文档还说明:

当您预先分配一块内存来保存某种类型的矩阵时 除了double之外,它的内存效率更高,而且有时更快 为此使用repmat函数

下面的语句使用零来预先分配 uint8。它首先创建一个完整的双精度矩阵,然后 然后将矩阵转换为uint8。这需要花费时间和内存 不必要的

A = int8(zeros(100));
使用repmat,您只创建了一个double,从而减少了内存 需要

因此,优势在于,如果您想要的数据类型不是double,那么可以使用repmat复制非double数据类型

另见:,其中建议:

data1(1000,3000) = 0
而不是:

data1 = zeros(1000,3000)
避免初始化其他元素

至于动态调整大小,
repmat
可用于简洁地将数组的大小增加一倍(这是一种常见的方法,会导致每个元素的摊销O(1)附加值):


是的,在收集完所有元素后,您可以调整数组的大小,以删除末尾的空元素。

文档还说明:

当您预先分配一块内存来保存某种类型的矩阵时 除了double之外,它的内存效率更高,而且有时更快 为此使用repmat函数

下面的语句使用零来预先分配 uint8。它首先创建一个完整的双精度矩阵,然后 然后将矩阵转换为uint8。这需要花费时间和内存 不必要的

A = int8(zeros(100));
使用repmat,您只创建了一个double,从而减少了内存 需要

因此,优势在于,如果您想要的数据类型不是double,那么可以使用repmat复制非double数据类型

另见:,其中建议:

data1(1000,3000) = 0
而不是:

data1 = zeros(1000,3000)
避免初始化其他元素

至于动态调整大小,
repmat
可用于简洁地将数组的大小增加一倍(这是一种常见的方法,会导致每个元素的摊销O(1)附加值):

是的,在收集完所有元素后,可以调整数组的大小以删除末尾的空元素