我有几个矩阵,每个矩阵的列数相同,但行大小不同。每个矩阵都包含正值和负值。为了分组(因为有很多矩阵),每个矩阵都存储在一个2D单元数组中。举个小例子:
Matrix1:
C1 C2 C3
Val1 6 7 1
Val2 3 9 -7
Val3 -12 -22 -4
Matrix2:
C1 C2 C3
Val1 5 19 -2
Val2 4 21 9
Val3 -1 3 11
Val4 -30 13 7
Val5 3 -4 10
matrixStore{1,1} = Matrix1
matrixStore{1,2} = Matrix2
我试图将这些值规范化到-1到1的范围,以列方式,跨矩阵的方式。所以,使用这个例子,我得到了每列的最大值和最小值,并将它们放在两个向量中:
% C1: Max = 6, Min = -30
% C2: Max = 21, Min = -22
% C3: Max = 11, Min = -7
maxVals = [6, 21, 11];
minVals = [-30, -22, -7];
我现在如何应用最大值和最小值来规范化所有矩阵的每一列?
我使用以下代码获取最大值和最小值:
maxColsBuilder = [];
minColsBuilder = [];
% Find the max values for each column in every matrix and stack them together
maxColValsFromCell = cellfun(@max, matrixStore(1,:), 'Uni', 0);
maxColMatrix = cell2mat(maxColValsFromCell');
maxColsBuilder = [maxColsBuilder, maxColMatrix'];
% Do the same for the min values
minColValsFromCell = cellfun(@min, matrixStore(1,:), 'Uni', 0);
minColMatrix = cell2mat(minColValsFromCell');
minColsBuilder = [minColsBuilder, minColMatrix'];
% Find the max values for each column
maxVals = (max( maxColsBuilder, [], 2 ))'
% Also find the min values for column
minVals = (min( minColsBuilder, [], 2 ))'
有人能帮我根据需要使用这些向量使我的数据正常化吗?
matrixStore中每个矩阵的以下代码显示了矩阵的规范化版本:
[unknown, matrices] = size(matrixStore);
for matrixIndex = 1:matrices
[rows, columns] = size(matrixStore{1,matrixIndex});
normMatrix = matrixStore{1,matrixIndex};
for row = 1:rows;
for column = 1:columns;
normMatrix(row,column) = -1 + 2.*(matrixStore{1,matrixIndex}(row,column) - minVals(column))./(maxVals(column) - minVals(column));
end;
end;
normMatrix
end;
对于您提供的示例:
normMatrix1 =
1.0000 0.3488 -0.1111
0.8333 0.4419 -1.0000
0 -1.0000 -0.6667
normMatrix2 =
0.9444 0.9070 -0.4444
0.8889 1.0000 0.7778
0.6111 0.1628 1.0000
-1.0000 0.6279 0.5556
0.8333 -0.1628 0.8889
如果你有更新版本的Matlab,你可以使用正常函数代替。
在做了一些额外的搜索后,我找到了@rayryeng对这个问题的回答(2D矩阵中单个列的最小最大归一化),我修改了这个问题以适应:
[unknown, matrices] = size(matrixStore);
for matrixIndex = 1:matrices
normMatrix = matrixStore{1, matrixIndex};
normMatrix = bsxfun(@minus, bsxfun(@rdivide, bsxfun(@minus, normMatrix, minVals), maxVals - minVals), 0.5) * 2
end;
当我将这两种方法应用于一些实际的样本数据,包括6个包含12列和几千行的矩阵时,我发现使用bsxfund的方法更快。
如果有人对这两个答案有任何进一步的信息,请随时添加评论。
我有一个矩阵,我想和另外两个矩阵进行比较,看看我矩阵中的每个条目是包含在另外两个矩阵的值之内还是之外。例如,如果我的矩阵是: 另外两个矩阵是L和U: 和 我想取M的每个条目,比较一下它是否包含在L和U对应条目的范围内。 例如,对于M[1,1],它在-0.49416022和-0.84996737的范围之外,所以我将给这个比较赋值0。另一方面,对于M[2,3],值是-0.5240536,因此在1.14
我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来
我是matlab新手,不熟悉矩阵数组。我有很多矩阵nx6: 每个矩阵都属于这种类型: 其中E和F是格式的日期。具体来说,F是时间差。 同时考虑所有矩阵,我想在列A、B、D中具有相等值的所有矩阵中求和列F的值。 对于D列的每个值(总线数),我想得到一个新的矩阵,如下所示: 提前感谢您的帮助!
我有一个数据集,它有4列/属性和150行。我想用最小最大规范化来规范化这个数据。到目前为止,我的代码是: 这里,和返回全局最小值和最大值。因此,这段代码实际上对2D矩阵中的所有值应用最小-最大规范化,以便全局最小值为0,全局最大值为1。 然而,我想对每一列分别执行相同的操作。具体来说,2D矩阵的每一列都应该独立于其他列进行最小-最大规格化。 我尝试使用只是使用和,但得到的错误说矩阵维度必须一致。
我必须将0到1之间的Levenshtein距离归一化。我看到不同的变化漂浮在所以。 null https://commons.apache.org/proper/commons-text/apidocs/org/apache/commons/text/similary/levenshteIndistance.html
问题内容: 我在sql中有一个普遍的疑问。实际上,“ Top 1 1”将做什么?以下查询的含义是什么? SQL Server查询中选择“ TOP 1 1”和“ SELECT 1”之间的区别是什么? 问题答案: 表示在结果集中选择第一条记录 平均值返回1作为结果集 表示如果条件为true,并且从select返回了任何行,则仅返回顶部行,并且仅返回该行的整数(仅返回整数1就没有数据)。