Matlab 如何求满足条件的三维矩阵的N值

Matlab 如何求满足条件的三维矩阵的N值,matlab,Matlab,我有一个3D数组,它由特性表示。功能的每个元素都是一个数字x。现在我将得到这个数字并计算这个数字的g(x)和f(x)(g和f是x的函数)。我的问题是如何在g(x)和f(x)之间获得绝对值的N最大化。函数将返回一个包含N元素x的数组。但我不知道如何得到它们。你能帮我吗 这是我的代码: %features is 3D array %N is elements that we need %Fs,sigmas,thetas are size of the array % return N element

我有一个3D数组,它由
特性
表示。
功能的每个元素都是一个数字
x
。现在我将得到这个数字并计算这个数字的
g(x)
f(x)
g
f
是x的函数)。我的问题是如何在
g(x)
f(x)
之间获得绝对值的
N
最大化。函数将返回一个包含
N
元素
x
的数组。但我不知道如何得到它们。你能帮我吗

这是我的代码:

%features is 3D array
%N is elements that we need
%Fs,sigmas,thetas are size of the array
% return N elements of features that maximization abs(f_s-g_s)
function features_filter=gabor_sort(features,N,Fs,sigmas,thetas)

for k = 1:numel(sigmas)
    for j = 1:numel(Fs)
        for i = 1:numel(thetas)
            x= features(:,:,k,j,i);
            f_x=x.^2;
            g_x=x.^3+1;
            s1=abs(f_x-g_x);
            %%Do something in here to get maximization of s1        
         end
    end
end

end

这不是问题。创建两个矩阵,用于存储我们为
sigma、Fs
theta
的每个组合获得的特征,并将每个特征的绝对值放置在此矩阵中,完成后,按降序对这些距离进行排序。然后,我们可以使用的第二个参数为我们提供最大化此距离的特征的位置。换句话说,请执行以下操作:

%features is 3D array
%N is elements that we need
%Fs,sigmas,thetas are size of the array
% return N elements of features that maximization abs(f_x-g_x)
function features_filter=gabor_sort(features,N,Fs,sigmas,thetas)

s1 = []; % s1 array to store our distances
xFeatures = []; %// Features to return

for k = 1:numel(sigmas)
    for j = 1:numel(Fs)
        for i = 1:numel(thetas)
            x = features(:,:,k,j,i);
            xFeatures = cat(3,xFeatures,x); %// Stack features in a 3D matrix
            x = x(:); %// Convert to 1D as per your comments
            f_x=mean(x.^2); %// Per your comment
            g_x=mean(x.^3+1); %// Per your comment
            s1 = [s1 abs(f_x-g_x)]; %// Add to s1 array
        end
    end
end

[~,sortInd] = sort(s1, 'descend');

%// Return a 3D matrix where each slice is a feature matrix
%// The first slice is the one that maximized abs(f_x - g_x) the most
%// The second slice is the one that maximized abs(f_x - g_x) the second most, etc.
features_filter = xFeatures(:,:,sortInd(1:N));


次要说明:此代码未经测试。我无法访问您的数据,因此无法真正复制。希望这能奏效

我不太明白你想要什么。是否要返回功能中所有值的
N
abs(f_x-g_x)
最大值,还是要返回与
abs(f_x-g_x)
最大值相对应的功能?您的问题描述不清楚。我想找到满足abs(f_x-g_x)最大化的N个特性值,因此您想找到最大化abs(f_x-g_x)的
N个
特性。
abs(f_x-g_x)
从语法上看是一个2D矩阵。你的标准是什么,以显示一个矩阵从这个计算是最大化的距离?你把矩阵中的所有值加起来了吗?只有1D。假设x是一个值,f_x和g_x也是一个值。在我的完整代码中,我使用f_x=mean(x(:)…但为了简单起见,我只假设x是value谢谢rayryeng。你的代码返回3D矩阵,对吗?如果我只返回只存储x值的1D矩阵如何。示例功能\u过滤器=[x\u 1 x\u 2…x\u N]。这将很容易访问如果我想返回1D矩阵,我将执行features_filter=features(:,:,sortInd(1:N));,对吗?@user3051460-在这种情况下,您将更改
xFeatures=cat(3,xFeatures,x)
xFeatures=[xFeatures x]。在此之后,您将执行
features\u filter=xFeatures(sortInd(1:N))