如何按列和按行标准化我的数组在 0 和 1 之间

Posted

技术标签:

【中文标题】如何按列和按行标准化我的数组在 0 和 1 之间【英文标题】:How to normalize my array between 0 and 1 by column and by line 【发布时间】:2020-11-13 13:35:44 【问题描述】:

我有一个数组,需要对其进行标准化,使其结果为 0 到 1 之间的数字。我已经对整个数组进行了标准化,如下所示:

C = A / A.max(axis=0)

print(C)
____________________________________________________________________
[[0.         0.05263158 0.1        0.14285714 0.18181818 0.2173913 ]
 [0.33333333 0.36842105 0.4        0.42857143 0.45454545 0.47826087]
 [0.66666667 0.68421053 0.7        0.71428571 0.72727273 0.73913043]
 [1.         1.         1.         1.         1.         1.        ]]

但现在我必须按列和按行规范化。我怎样才能通过轴减少来做到这一点?如果对我所做的事情有更好的方法,请建议我进行更改。

我的预期结果是值标准化的两个数组。一个考虑列,另一个考虑行

这是我的数据

A = [[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

【问题讨论】:

您的预期结果是什么?输入是什么 - A?请提供minimal reproducible example。它们是什么类型的数组? 我已经更新了帖子,如果我不清楚再问我 【参考方案1】:

您跳过了最小的部分。通常 0-1 归一化要求从分母和分子中减去最小值。 https://stats.stackexchange.com/questions/70801/how-to-normalize-data-to-0-1-range

import numpy as np

A = np.matrix([[ 0,  1,  2,  3,  4,  5],
 [ 6,  7,  8,  9, 10, 11],
 [12, 13, 14, 15, 16, 17],
 [18, 19, 20, 21, 22, 23]])

(A-A.min(axis=1))/(A.max(axis=1)-A.min(axis=1))
(A-A.min(axis=0))/(A.max(axis=0)-A.min(axis=0))

【讨论】:

我该如何处理整个数据? 通常按列进行标准化,因为它们代表单独的特征/变量。 是的,但我需要它 我试过normalized = (x-min(x))/(max(x)-min(x)),但它抛出了The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() (A-A.min())/(A.max()-A.min()) 示例【参考方案2】:

我的预期结果是两个具有标准化值的数组。一个考虑列,另一个考虑行

a = np.array([[ 0,  1,  2,  3,  4,  5],
              [ 6,  7,  8,  9, 10, 11],
              [12, 13, 14, 15, 16, 17],
              [18, 19, 20, 21, 22, 23]])

如果

c = a / a.max(axis=0)

然后给你你想要的列

d = a / a.max(axis=1)[:,None]  

行就足够了。

>>> d.round(4)
array([[0.    , 0.2   , 0.4   , 0.6   , 0.8   , 1.    ],
       [0.5455, 0.6364, 0.7273, 0.8182, 0.9091, 1.    ],
       [0.7059, 0.7647, 0.8235, 0.8824, 0.9412, 1.    ],
       [0.7826, 0.8261, 0.8696, 0.913 , 0.9565, 1.    ]])

https://numpy.org/doc/stable/user/basics.broadcasting.html

【讨论】:

以上是关于如何按列和按行标准化我的数组在 0 和 1 之间的主要内容,如果未能解决你的问题,请参考以下文章

pandas实现两个dataframe数据的合并:按行和按列

如何按行和按列随机化(或置换)数据框?

是否可以通过一个模板函数实现按列操作和按行操作?

对矩阵按行和按列进行排序

python数据分析模块:numpy、pandas全解

如何存储数组到sharedpreference中