matlab中给变量分配内存,在Matlab中避免内存重新分配

它是一个迭代方法,调用两个函数:em()和mpm()。这两个函数使用两个相当大的辅助矩阵,因此为了避免在我的C++实现中的每个调用中重新分配内存,我已经为矩阵预先存储了内存,并且在必要时重新设置了其值。

如何在Matlab实现中避免内存重新分配?据我所知,预先分配矩阵并不能解决我的问题,因为当函数试图更改参数值时,Matlab会自动创建一个副本。

是否可以声明M文件中所有函数共享的变量?

编辑:

这是我的C++代码的概要。我预先分配的两个矩阵是

chanceMatrix

labelAssignedVector

GSegmentedImage * GEmMpmSegmentator::segmentImage(GImage * image, int labelRange, int steps, unsigned char minGrayLevel){

GSegmentedImage * segmentedImage = new GSegmentedImage(image->getHeight(), image->getWidth());

GParameterVector * paramVector = new GParameterVector(labelRange);

randomizeLabelField(segmentedImage, labelRange);

setOutOfImageLabel(segmentedImage, image, minGrayLevel);

initializeParameterVector(image, paramVector);

// labelAssignedVector stores how many times a pixel received a label 'k'.

// row = image row, column = image column, page = label.

G3DMatrix * labelAssignedVector = new G3DMatrix(image->getHeight(), image->getWidth(), labelRange);

// Chance matrix is used by the mpm method.

// chanceMatrix: row = label, column = gray level, page = number of different neighbors

G3DMatrix * chanceMatrix = new G3DMatrix(paramVector->getLabelRange(), 256, 9);

for (int i = 0; i < steps; i++){

labelAssignedVector->reset();

if (difPenalty < difMax){

difPenalty += difInc;

}

mpm(paramVector, labelAssignedVector, segmentedImage, image, minGrayLevel, chanceMatrix);

em(paramVector, labelAssignedVector, image);

}

delete paramVector;

return segmentedImage;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值