首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从ndgrid中校正和连接单个网格。

从ndgrid中校正和连接单个网格。
EN

Stack Overflow用户
提问于 2016-07-15 21:11:47
回答 1查看 98关注 0票数 2

我试图以一种一般的方式做以下几件事:

代码语言:javascript
运行
复制
x = {0:1, 2:3, 4:6};
[a,b,c] = ndgrid(x{:});
Res = [a(:), b(:), c(:)]
Res =
   0   2   4
   1   2   4
   0   3   4
   1   3   4
   0   2   5
   1   2   5
   0   3   5
   1   3   5
   0   2   6
   1   2   6
   0   3   6
   1   3   6

我认为我必须从以下几个方面着手,但我不知道如何继续下去:

代码语言:javascript
运行
复制
cell_grid = cell(1,numel(x));
[cell_grid{:}] = ndgrid(x{:});
[cell_grid{:}]
ans =    
ans(:,:,1) =
   0   0   2   3   4   4
   1   1   2   3   4   4
ans(:,:,2) =
   0   0   2   3   5   5
   1   1   2   3   5   5
ans(:,:,3) =
   0   0   2   3   6   6
   1   1   2   3   6   6

对于有循环和没有循环的三个变量[a, b, c],我可以用多种方法解决这个问题,但是当我得到更多的向量时,我就开始挣扎了。直接重塑它不会给出正确的结果,当我有任意数量的维度时,将整形和永久变形混合在一起变得非常困难。

你能想出一种聪明的方法来做到这一点,在x中扩展到3-30矢量吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-15 21:17:03

您可以使用cellfun来扁平每个单元格数组元素,然后沿着第二个维度将它们连接起来。

代码语言:javascript
运行
复制
tmp = cellfun(@(x)x(:), cell_grid, 'uniformoutput', false);
out = cat(2, tmp{:})

或者,您可以避免使用cellfun,并沿着比每个cell_grid成员的维度(即numel(x) + 1)更高的维度将它们连接起来。然后reshape将所有维度都压平,但最后一个维度则是你刚刚连接的。

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

https://stackoverflow.com/questions/38405091

复制
相关文章

相似问题

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