【发布时间】:2012-12-05 14:46:36
【问题描述】:
我有一个数组I = 6100x6300x72 应用于函数,结果Icor 包含一些我想用零替换的负值。虽然这是一个很多问的问题,但在我的情况下,RAM 限制使任务变得更加困难。举个例子:
I=rand(6100,6300,72); %# example size of I
[x,y,z]=size(I); %# get the dimensions for later reshaping
I=reshape(I,x*y,z); %# reshape to columns
Icor=function(I) %# apply a function to I, result Icor
Icor(Icor < 0)=0; %# Icor has negatives which need removing
Icor=reshape(Icor,x,y,z); %# reshape back to same size as I (original size)
我的问题在于逻辑索引步骤,Icor(Icor < 0)=0;,这是我的 RAM 最大化的地方。有没有创造性的方法来解决这个问题? (如果我错过了一些非常明显的事情,请原谅我)。
【问题讨论】:
-
如何清除原始副本
Iout(清除I)?那么,提取Icor的子集并一一处理呢? -
或者重写
function以返回0而不是一个负数,使Icor(Icor < 0)=0这一步变得多余? -
我已经尝试清除
I的原始副本,但它仍然存在错误。也许在Icor的向量上按列删除零然后重塑的循环可能是解决方案 -
为了使事情复杂化,我想我将
I分成两半并分别处理每一半.. -
不能解决您的问题,但您可以使用
I=reshape(I,[],z);而不是I=reshape(I,x*y,z);。
标签: arrays matlab vector indexing