是否存在索引ndgrid输出而不实际构造输出,因为内存问题?假设我们需要构造输出并要求 i 元素
[output{1:n}] = ndgrid(1:k)
[output{1}(i) ... output{n}(i)]
是否可以避免施工?
答案 0 :(得分:2)
我相信您正在寻找功能ind2sub
:
[o{1:n}] = ind2sub( ones(1,n)*k, ii );
您的ndgrid的大小为[k, k, ... k]
(n
次),并且您正尝试将线性索引ii
访问到此k^n
维度超级卷中。
答案 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
作为答案。