【问题标题】:Normalize a multidimensional array规范化多维数组
【发布时间】:2019-08-09 03:38:19
【问题描述】:

我有一个 5x600x16 数组,下面显示了一个较小的类似数组的示例。我需要对每个切片中的列值进行标准化(总共 5 个)。

tensor([[[9.9771e-01, 6.6219e-02, 8.6409e-03, 1.1918e-05, 2.3837e-05],
         [9.9771e-01, 6.6219e-02, 8.6409e-03, 1.1918e-05, 2.3837e-05]],

        [[9.9525e-01, 9.6969e-02, 7.5091e-03, 1.0301e-05, 3.0902e-05],
         [9.9802e-01, 6.2234e-02, 7.8646e-04, 2.0696e-05, 1.0348e-05]],

        [[9.7093e-01, 2.3617e-01, 3.2587e-02, 0.0000e+00, 0.0000e+00],
         [9.7418e-01, 2.2391e-01, 5.7788e-03, 6.0829e-05, 9.1244e-05]],

        [[9.9781e-01, 6.4524e-02, 1.8817e-03, 1.8268e-05, 0.0000e+00],
         [9.9153e-01, 1.2825e-01, 1.0527e-02, 0.0000e+00, 3.8630e-05]]])

出于这个问题的目的,让我们考虑数组

a = np.array([[[10, 100, 1], [5, 50, .5]], [[10, 1000, 10], [10, 1, 20]]])

我尝试使用来自PyTorchnormalize,但没有成功

>>>f.normalize(torch.from_numpy(a), p=2, dim=2)
tensor([[[0.0995, 0.9950, 0.0099],
         [0.0995, 0.9950, 0.0099]],

        [[0.0100, 0.9999, 0.0100],
         [0.4468, 0.0447, 0.8935]]], dtype=torch.float64)

以及我创建的一个简单函数,取得了更大的成功

def normalize(data):
    return (data - data.mean()) / (data.max() - data.min())

我将每个a[...] 切片传递,然后stack 再次将结果一起传递。

有没有更好的方法可以按照我描述的方式正确规范化我的数据?

【问题讨论】:

  • 所以你说a = a/a.max() 是不够的,因为它会根据自身对整个数组进行规范化,而你只对针对自身规范化每一列感兴趣?
  • @Reedinationer 是的,我想一次对每一列的数组进行标准化,但也要考虑到它是三维的

标签: python pandas numpy


【解决方案1】:

试试这个:

import pandas as pd
x =[[[9.9771e-01, 6.6219e-02, 8.6409e-03, 1.1918e-05, 2.3837e-05],
         [9.9771e-01, 6.6219e-02, 8.6409e-03, 1.1918e-05, 2.3837e-05]],

        [[9.9525e-01, 9.6969e-02, 7.5091e-03, 1.0301e-05, 3.0902e-05],
         [9.9802e-01, 6.2234e-02, 7.8646e-04, 2.0696e-05, 1.0348e-05]],

        [[9.7093e-01, 2.3617e-01, 3.2587e-02, 0.0000e+00, 0.0000e+00],
         [9.7418e-01, 2.2391e-01, 5.7788e-03, 6.0829e-05, 9.1244e-05]],

        [[9.9781e-01, 6.4524e-02, 1.8817e-03, 1.8268e-05, 0.0000e+00],
         [9.9153e-01, 1.2825e-01, 1.0527e-02, 0.0000e+00, 3.8630e-05]]]

for b in x:
    df = pd.DataFrame(b).transpose()
    normalized_df=(df-df.min())/(df.max()-df.min())
    print(normalized_df)

【讨论】:

  • 这确实会提供有用的结果,但如果你注意到它说我在我的问题中尝试过的第二件事,这与它非常相似,我想探索一种新的方法这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-28
  • 2012-02-12
  • 1970-01-01
  • 2021-06-18
  • 2020-12-13
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多