Matlab 八度错误:调用函数时参数1没有默认值
我需要按列查找每个值的值。 所以我有这样的功能:Matlab 八度错误:调用函数时参数1没有默认值,matlab,octave,Matlab,Octave,我需要按列查找每个值的值。 所以我有这样的功能: function [X_norm, mu, sigma] = featureNormalize(X) X_norm = X; mu = zeros(1, size(X, 2)); sigma = zeros(1, size(X, 2)); for x = 1:size(X, 1) mu(1,x) = mean(:, x) sigma(1,x) = std(:, x) for y = 1:size(X, 2)
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = X;
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for x = 1:size(X, 1)
mu(1,x) = mean(:, x)
sigma(1,x) = std(:, x)
for y = 1:size(X, 2)
X_norm(x,y) = (X(x,y) - mu)/sigma
end
end
end
我试着这样调用这个函数:
>> X = [23 32 2 ; 23 23 1];
>> featureNormalize(X)
结果我得到这样的错误:调用函数时参数1没有默认值。我看不出这里出了什么问题,有什么建议吗?我认为在如何使用
mean()
和std()
函数方面存在问题,而且可能订阅的赋值也是一个问题
我不确定,但请尝试以下代码作为您的函数定义:
1。基于行的规范化:
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 1));
sigma = zeros(1, size(X, 1));
for x = 1:size(X, 1)
mu(x) = mean( X(x, :) );
sigma(x) = std( X(x, :) );
for y = 1 : size(X, 2)
X_norm(x, y) = ( X(x, y) - mu(x) ) / sigma(x);
end
end
end
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for y = 1:size(X, 2)
mu(y) = mean( X(:, y) );
sigma(y) = std( X(:, y) );
for x = 1 : size(X, 1)
X_norm(x, y) = ( X(x, y) - mu(y) ) / sigma(y);
end
end
end
2。基于列的规范化:
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 1));
sigma = zeros(1, size(X, 1));
for x = 1:size(X, 1)
mu(x) = mean( X(x, :) );
sigma(x) = std( X(x, :) );
for y = 1 : size(X, 2)
X_norm(x, y) = ( X(x, y) - mu(x) ) / sigma(x);
end
end
end
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for y = 1:size(X, 2)
mu(y) = mean( X(:, y) );
sigma(y) = std( X(:, y) );
for x = 1 : size(X, 1)
X_norm(x, y) = ( X(x, y) - mu(y) ) / sigma(y);
end
end
end
我认为在使用
mean()
和std()
函数的方式上存在问题,并且可能订阅的赋值也是一个问题
我不确定,但请尝试以下代码作为您的函数定义:
1。基于行的规范化:
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 1));
sigma = zeros(1, size(X, 1));
for x = 1:size(X, 1)
mu(x) = mean( X(x, :) );
sigma(x) = std( X(x, :) );
for y = 1 : size(X, 2)
X_norm(x, y) = ( X(x, y) - mu(x) ) / sigma(x);
end
end
end
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for y = 1:size(X, 2)
mu(y) = mean( X(:, y) );
sigma(y) = std( X(:, y) );
for x = 1 : size(X, 1)
X_norm(x, y) = ( X(x, y) - mu(y) ) / sigma(y);
end
end
end
2。基于列的规范化:
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 1));
sigma = zeros(1, size(X, 1));
for x = 1:size(X, 1)
mu(x) = mean( X(x, :) );
sigma(x) = std( X(x, :) );
for y = 1 : size(X, 2)
X_norm(x, y) = ( X(x, y) - mu(x) ) / sigma(x);
end
end
end
function [X_norm, mu, sigma] = featureNormalize(X)
X_norm = zeros(size(X));
mu = zeros(1, size(X, 2));
sigma = zeros(1, size(X, 2));
for y = 1:size(X, 2)
mu(y) = mean( X(:, y) );
sigma(y) = std( X(:, y) );
for x = 1 : size(X, 1)
X_norm(x, y) = ( X(x, y) - mu(y) ) / sigma(y);
end
end
end
如果您正在计算每个元素的标准化值,即每个
列的平均值和西格玛值,我认为您需要进行一些更改,因为您的问题代码并没有真正反映这一点,因为您使用的是平均值和西格玛值的数组。所以,我认为你需要做类似的事情-
%// Initialize array for final normalized values
X_norm = zeros(size(X));
for x = 1:size(X, 2)
%// Store mean and standard deviation values for each column
mu = mean(X(:, x))
sigma = std(X(:, x))
%// Use an innermost loop to calculate the normalized values
%// for all the elements in each column.
%// Thus, for all these elements, you need to use the same mean
%// and standard deviation calculated in the previous step
for y = 1:size(X, 1)
X_norm(y,x) = (X(y,x) - mu)/sigma
end
end
使用-
X_norm = bsxfun(@rdivide, bsxfun(@minus, X, mean(X,1)),std(X,[],1))
如果您正在计算每个元素的标准化值,即每个列的平均值和西格玛值,我认为您需要进行一些更改,因为您的问题代码并没有真正反映这一点,因为您使用的是平均值和西格玛值的数组。所以,我认为你需要做类似的事情-
%// Initialize array for final normalized values
X_norm = zeros(size(X));
for x = 1:size(X, 2)
%// Store mean and standard deviation values for each column
mu = mean(X(:, x))
sigma = std(X(:, x))
%// Use an innermost loop to calculate the normalized values
%// for all the elements in each column.
%// Thus, for all these elements, you need to use the same mean
%// and standard deviation calculated in the previous step
for y = 1:size(X, 1)
X_norm(y,x) = (X(y,x) - mu)/sigma
end
end
使用-
X_norm = bsxfun(@rdivide, bsxfun(@minus, X, mean(X,1)),std(X,[],1))
我刚刚编辑了我的答案,请查看。编辑对我来说对结果更有意义。有一件事我认为很重要,但还没有人提到,那就是错误消息的含义。在倍频程中,您可以使用:
来使用a,即平均值(:)
使用默认值调用倍频程,在平均值的情况下,
不存在。我刚刚编辑了我的答案,请检查。编辑对我来说对结果更有意义。有一件事我认为很重要,但还没有人提到,那就是错误消息的含义。在八度音阶中,您可以使用:
来使用a,即平均值(:)
使用默认值调用八度音阶,而在平均值的情况下,
不存在。您的解决方案绝对正确,我混淆了行和列,非常感谢)@Rocketq我认为这会产生不同的结果。鉴于问题的文本,对我来说这更有意义,所以我这样说。确定你到底想要什么。要检查,请使用类似于X=rand(5,4)
的方法。您的解决方案完全正确,我混淆了行和列,非常感谢)@Rocketq我认为这会产生不同的结果。鉴于问题的文本,对我来说这更有意义,所以我这样说。确定你到底想要什么。要检查,请使用类似于X=rand(5,4)
的东西。您的答案正确,但我混淆了行和列)@Rocketq-我们混淆了“每列值的标准化值”。你想如何规范化矩阵,我的意思是根据什么?根据每行或每列的“平均值”和“标准值”做出决定。请你澄清一下这一点好吗?请看每一篇专栏文章,但别担心Divakar的解决方案很好谢谢你的修改,现在未来的读者就不会那么困惑了!:)@迪瓦卡-没错!有点混乱。我不确定未来的读者,因为这个问题的主题似乎有点个性化。没关系。谢谢(:你回答正确,但我混淆了行和列)@Rocketq-我们混淆了“每列值的标准化值”。你想如何标准化矩阵,我的意思是根据什么?取“平均值”和“标准值”每一行或每一列的作者都会做出决定。你可以澄清这一点吗?按每一列来做,但别担心,Divakar的解决方案很好谢谢你的更改,现在未来的读者不会那么困惑了!:)@Divakar-没错!有点混乱。我不确定未来的读者,因为这个问题的主题似乎有点个性化。没关系。谢谢