Error with Min-Max Scaling
7 次查看(过去 30 天)
显示 更早的评论
The code below fails due to line 5, Just trying to make simple min max scaling code in range of -1 and 1
t=[ 1 5 6; 8 9 7; 2 4 5];
for i= 1:length(t)
Scale1=(t(:,i)-min(t(:,i)))/(max(t(:,i))-min(t(:,i)));
Scalef(i)=2*Scale1 -1
end
Scaled_data=Scalef
0 个评论
采纳的回答
Tayyab Khalil
2021-4-25
First thing, kindly post your code inside a code block to make it easier to read.
I got your code working by simply assigning the scaled value to a column of scalef, the error was that you were trying to assign it as if it were a single value but it is not.
t=[ 1 5 6; 8 9 7; 2 4 5];
for i= 1:length(t)
Scale1=(t(:,i)-min(t(:,i)))/(max(t(:,i))-min(t(:,i)));
Scalef(:,i)=2*Scale1 -1
end
Scaled_data=Scalef
Which gives the following output:
Scaled_data =
-1.0000 -0.6000 0
1.0000 1.0000 1.0000
-0.7143 -1.0000 -1.0000
I don't know if this is what you're looking for, seems to be scaling each column between -1 and 1.
更多回答(1 个)
Steven Lord
2021-4-25
t = [ 1 5 6; 8 9 7; 2 4 5]
t2 = normalize(t, 'range', [-1 1])
You can also specify a dimension input.
t3 = normalize(t, 2, 'range', [-1 1])
2 个评论
Steven Lord
2021-4-25
Don't use length on a non-vector especially when you want to iterate over the columns of an array.
M = zeros(5, 4);
L = length(M)
In this case L is the number of rows in M rather than the number of columns.
numRows = size(M, 1)
numCols = size(M, 2)
% If using a sufficiently recent MATLAB
numRows2 = height(M)
numCols2 = width(M)
In this other case, where M2 has more columns than rows, L2 is the number of columns in M2. But size, height, and width will always return the size in a specific dimension regardless of whether the array is a vector, a tall matrix, a wide matrix, or an N-dimensional array.
M2 = zeros(3, 17);
L2 = length(M2)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!