当前位置: 首页 > 面试题库 >

在python中标准化numpy数组列

任昊阳
2023-03-14
问题内容

我有一个numpy数组,其中特定行的每个单元格代表一个功能的值。我将它们全部存储在100 * 4矩阵中。

A     B   C
1000  10  0.5
765   5   0.35
800   7   0.09

知道如何将每个值都介于0和1之间的numpy.array的行标准化吗?

我想要的输出是:

A     B    C
1     1    1
0.765 0.5  0.7
0.8   0.7  0.18(which is 0.09/0.5)

提前致谢 :)


问题答案:

如果我理解正确,那么您要做的就是除以每一列中的最大值。您可以使用广播轻松地做到这一点。

从示例数组开始:

import numpy as np

x = np.array([[1000,  10,   0.5],
              [ 765,   5,  0.35],
              [ 800,   7,  0.09]])

x_normed = x / x.max(axis=0)

print(x_normed)
# [[ 1.     1.     1.   ]
#  [ 0.765  0.5    0.7  ]
#  [ 0.8    0.7    0.18 ]]

x.max(0)在第0维(即行)上取最大值。这为您提供了一个大小向量,(ncols,)其中每一列都包含最大值。然后x,您可以除以该向量,以标准化您的值,以便将每一列中的最大值缩放为1。

如果x包含负值,则需要先减去最小值:

x_normed = (x - x.min(0)) / x.ptp(0)

在此,x.ptp(0)返回沿轴0的“峰到峰”(即范围,最大值-最小值)。此归一化还确保每一列的最小值将为0。



 类似资料:
  • 问题内容: 我需要规范化值列表以适合概率分布,即介于0.0和1.0之间。 我知道 如何 规范化,但是很好奇Python是否具有自动执行此功能的功能。 我想从: 至 问题答案: 采用 : 对总和进行归一化以确保总和始终为1.0(或尽可能接近)。 采用 相对于最大值归一化

  • 问题内容: 在对音频或图像阵列进行一些处理之后,需要先在一定范围内对其进行标准化,然后才能将其写回到文件中。可以这样完成: 有没有那么繁琐,方便的函数来做到这一点?似乎无关。 问题答案: 使用和可以消除中间的临时阵列,从而节省了一些内存。乘法比除法便宜,所以 比…快一点 由于我们在这里使用基本的numpy方法,因此我认为这是尽可能有效的numpy解决方案。 就地操作不会更改容器数组的dtype。由

  • 问题内容: 我在创建numpy数组的numpy数组时遇到问题。我将在一个循环中创建它: 所需结果: 实际结果: 可能吗?我不知道数组的最终尺寸,因此无法使用固定尺寸对其进行初始化。 问题答案: 永远不要在循环中追加数组:与基本的Python相比,这是NumPy非常不擅长的一项操作。这是因为您要对每个数据进行完整复制,这将花费您二次时间。 相反,只需将您的数组附加到Python列表中,并在最后进行转

  • 问题内容: 我有一个字典,需要将其转换为NumPy结构化数组。我正在使用arcpy函数,因此NumPy结构化数组是唯一可以使用的数据格式。 我已经试过了: 但我不断 下面的方法有效,但是很愚蠢,显然不适用于真实数据。我知道有一个更优雅的方法,我只是想不通。 问题答案: 您可以使用: 产量 如果您不想创建元组的中间列表,则可以改用: 在Python2中: 在Python3中: 为什么使用该列表不起作

  • 问题内容: 有什么简单的方法可以展平 进入 问题答案: 似乎您正在考虑考虑使用一定数量的cols来形成块,然后获取每个块中的元素,然后移至下一个。因此,考虑到这一点,这是一种方法- 后面的动机将在中详细讨论。 此外,要保留2D格式- 并以 直观的 3D阵列格式显示它-

  • 这适用于必须使用SVM方法来提高模型精度的分配。 共有3部分,编写了下面的代码 但在此之后,问题如下 执行数字标准化。数据,并将转换后的数据存储在可变数字中。 提示:从sklearn.preprocessing.使用所需的实用程序再次,将digits_standardized分成两个集合名称X_train和X_test。此外,将digits.target分成两组Y_train和Y_test。 提示