首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Matlab中通过多维数组中的两个变量循环

在Matlab中通过多维数组中的两个变量循环
EN

Stack Overflow用户
提问于 2016-07-13 00:48:26
回答 1查看 134关注 0票数 0

我有一个三维阵列(高光谱图像),我想重采样每一个元素的第一个维度(每个像素),三维(波长)。

我一直在尝试一个嵌套的for循环,但没有成功,我想我误解了这个概念。在这里,我正在尝试:

代码语言:javascript
运行
复制
    T_Ire = zeros(size(I)); % initialize array

for i = 1:numel(I(:,1,1))
    for t = 1:numel(I(1,:,1))

   step=squeeze(I(i,t,:));
   step=double(step);
   step=step';
   step=resample(step',2,3);
   T_Ire(i,t,:)=step;

    end
end

我是三维阵列(高光谱图像)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-13 01:41:40

这里有两个问题:

  1. 当您调用step=resample(step',2,3);时,数组的大小将是原来的三分之二。然后,当你试图把它放回立方矩阵,它将不适合,因为它有较少的元素。您可以通过使用适当的大小初始化T_Ire来解决这个问题。

如下所示:

代码语言:javascript
运行
复制
T_Ire = zeros(size(I, 1), size(I, 2), size(I, 3) * 2 / 3);
  1. 当您接受数组I(i,t,:)时,它的大小将是1x1xN (其中N =第三维空间的大小)。但是,当您调用step=squeeze(I(i,t,:));时,现在是Nx1了。要将其添加回,您应该调用变性人重塑将其大小调整回1x1xN

使用变性人

代码语言:javascript
运行
复制
T_Ire(i,t,:) = permute(step, [3 2 1]);

使用重塑

代码语言:javascript
运行
复制
T_Ire(i,t,:) = reshape(step, [1 1 numel(step)]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38340989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档