【发布时间】:2014-05-27 18:07:47
【问题描述】:
假设我有一个维度为 NxMxR 的数组stack。我想在给定维度上使用逻辑索引来更新其值,而不使用临时变量。
使用临时变量的示例:
for k=1:R
temp=stack(:,:,k);
temp(temp<max(max(temp))/2)=NaN;
cropped(:,:,k)=temp;
end
请注意,如果整个数组的条件相同,但它会随着R 维度而变化,这将是微不足道的。如果我只想以如下语法减去阈值,bsxfun 将是合适的:
cropped = bsxfun(@minus, stack, max(max(stack, [], 3))/2);
我发现临时变量的使用很笨拙,并且找不到为bsxfun 定义函数以执行循环的正确方法。
有人有建议吗?
【问题讨论】:
-
=NaN部分存在错误... -
@natan 正确,甚至更笨拙。谢谢。
-
简而言之,您有一个 3d 数组,并且您想编辑每个 2d 切片,以便 NaN 替换该切片的值
-
@natan 是正确的,或者使用给定切片的值进行其他操作。
标签: arrays matlab multidimensional-array bsxfun