索引(查询)ndgrid输出而不实际构造它

时间:2014-11-19 05:01:32

标签: matlab memory multidimensional-array

是否存在索引ndgrid输出而不实际构造输出,因为内存问题?假设我们需要构造输出并要求 i 元素

[output{1:n}] = ndgrid(1:k)  
[output{1}(i) ... output{n}(i)]

是否可以避免施工?

2 个答案:

答案 0 :(得分:2)

我相信您正在寻找功能ind2sub

[o{1:n}] = ind2sub( ones(1,n)*k, ii );

您的ndgrid的大小为[k, k, ... k]n次),并且您正尝试将线性索引ii访问到此k^n维度超级卷中。


PS,
最好not to use i as a variable name in Matlab

答案 1 :(得分:2)

我已经解决了这个问题,所以我发布了一个完整的答案。在m文件中写下以下函数:

function output=my_ndgrid(varargin)

in=nargin;
sz=zeros(1,in-1);
for i=1:in-1
    sz(i)=length(varargin{i});
end

ind=varargin{in};

[ndgrid_ind{1:length(sz)}] = ind2sub(sz,ind);

for i=1:length(sz)
    output{i}(ind)=varargin{i}(ndgrid_ind{i});
end

end

this回答中获取命令

[ndgrid_ind{1:length(sz)}] = ind2sub(sz,ind);

在上面的函数中,您可以根据需要传递任意数量的参数,就像传递给ndgrid一样。最后一个参数必须是索引(在您的情况下是i^th元素,因此索引将是i)。

例如,

a=my_ndgrid(1:3:10,2:2:6,5:1:8,10); %asking for 10th element

它将按照您的需要存储为a{1}(10),...,a{3}(10)

通过手动创建[4 6 5],您可以得到ndgrid作为答案。