【问题标题】:Less code lines for scaling and stacking columns in numpy用于在 numpy 中缩放和堆叠列的代码行更少
【发布时间】:2014-04-16 21:38:25
【问题描述】:

我刚开始使用 iPython 和 numpy。我确信可以用更少的代码做与下面相同的事情。我想将所有列(=数据点的维度,即行)缩放到 0 到 1 之间的值并将列重新组合为一个具有相同“形状”的数组。

import numpy as np
from StringIO import StringIO

data = np.genfromtxt("wine_names.csv", dtype=float, delimiter=',', skip_header=1) 

Data.shape => (178, 14)。一个 178 行 14 列的 csv 文件(14 维 178 个数据点)。

data0 = (data[:,0] - np.amin((data[:,0]))) / (np.amax((data[:,0]))-np.amin((data[:,0])))
data1 = (data[:,1] - np.amin((data[:,1]))) / (np.amax((data[:,1]))-np.amin((data[:,1])))
data2 = (data[:,2] - np.amin((data[:,2]))) / (np.amax((data[:,2]))-np.amin((data[:,2])))

直到 n。在这种情况下,它是 14。我确信这可以用更少的代码编写,但我不知道如何..

data_all = np.column_stack([data0, data1, data2])

这里也是 np.column_stack([data0, data1, data2, ....., n])

【问题讨论】:

  • 这应该在代码高尔夫/编程难题中吗?
  • 您可以通过np.min(data, axis=0) 获取列的所有最小值,最大值也是如此。

标签: python numpy ipython-notebook


【解决方案1】:

通过沿轴取最小值和最大值,您可以在一行中完成。

data_all = (data - np.min(data, axis=0))/(np.max(data, axis=0) - np.min(data, axis=0))

【讨论】:

  • 我不会在一行中这样做,因为您要计算相同的 min 两次。分两次执行:mn, mx = data.min(0), data.max(0); data_all = (data - mn)/(mx-mn) 或者,如果您不介意修改 data 数组,您也可以执行 data -= data.min(0); data /= data.max(0),这可能会更快。
  • @M4rtini 感谢您的帮助!我仍然很难理解轴的概念..
猜你喜欢
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多