获取

2013-05-19 26 views
0

鉴于一些多维矩阵A在八度/ Matlab的八度音/ MATLAB指数矩阵,获取

什么是得到相同的尺寸A,其中所有元素都通过他们的指数沿着第k替代的矩阵的最简单方法“第N维

即用于矩阵

A = 

ans(:,:,1) = 

    0.095287 0.191905 
    0.226278 0.749100 

ans(:,:,2) = 

    0.076826 0.131639 
    0.862747 0.699016 

我想要一个函数f,使得 F(A,1)=

ans(:,:,1) = 

    1 1 
    2 2 

ans(:,:,2) = 

    1 1 
    2 2 

F(A,2)=

ans(:,:,1) = 

    1 2 
    1 2 

ans(:,:,2) = 

    1 2 
    1 2 

F(A,3)=

ans(:,:,1) = 

    1 1 
    1 1 

ans(:,:,2) = 

    2 2 
    2 2 

此外,给定一个稀疏矩阵B

什么是最简单的方法来获得另一个相同大小的稀疏矩阵,其中非零元素被沿着第k维的索引替换? (所以同样的问题上面,但仅非零元素)

理想我正在寻找这是良好的矢量为八度的方式(这意味着它在任何没有明确环路)

澄清:对于稀疏矩阵,我正在寻找一种不涉及在任何点创建全尺寸(B)矩阵的解决方案。

回答

2

ndgrid()尽你所需,但不是以您要查找的格式。如果你知道输入的昏暗的事前,你可以使用下面的行创建的N维网格:

% for matrix a where ndims(a) == 3 
[x, y, z] = ndgrid (1:size(a,1), 1:size(a,2), 1:size(a,3)); 
% x is like f(a, 1) 
% y is like f(a, 2) 
% z is like f(a, 3) 

您可以写身边ndgrid自定义包装()将其转换为你正在寻找的函数格式。

+0

谢谢你,你能告诉我要为ngrid的文档。我搜索了“八度ngrid”,它没有出现 – dspyz

+0

http://www.mathworks.com/help/matlab/ref/ndgrid.html – Bee

+0

它是'n​​dgrid'不''ngrid'。它是着名的'meshgrid'函数的扩展。 – Bee

0

如果任何人的好奇,因为我不知道ndgrid没有,这里是我想出了答案:

function [y] = indices(a,k) 
    s = size(a); 
    n = s(k); 
    D = length(s); 
    x = permute(a,[k,1:(k-1),(k+1):D]); 

    y = reshape(x,n,[]); 
    y = diag(1:n) * ones(size(y)); 
    y = reshape(y,size(x)); 

    y = permute(y,[(2:k),1,(k+1):D]); 
endfunction 

function [y] = spindices(a,k) 
    s = size(a); 
    n = s(k); 
    D = length(s); 
    x = permute(a,[k,1:(k-1),(k+1):D]); 

    y = reshape(x,n,[]); 
    y = spdiag(1:n) * spones(y); 
    y = reshape(y,size(x)); 

    y = permute(y,[(2:k),1,(k+1):D]); 
endfunction