正确的方法将样本存储在numpy数组中

时间:2018-04-26 11:37:47

标签: python numpy

假设您有一个存储多变量样本数据的矩阵(二维numpy数组)。使用每个样本一个或每个样本一个来存储数据是否正确(速度和易用性)? E.g

array([[x1, y1, ...], [x2, y2, ...], ..., [xN, yN, ...]])

array([[x1, x2, ..., xN], [y1, y2, ..., yN], ...])

在MATLAB和Octave中,将每个样本视为向量肯定更容易,但是numpy不会给你任何指示。

例如。如果将每个样本存储为行向量,则可以使用以下方法对这些样本进行标准化:

X - mean(X, axis = 0)

但如果将它们存储为列向量,则必须编写

(X.T - mean(X, axis = 1)).T

这绝对不方便。

1 个答案:

答案 0 :(得分:1)

性能取决于访问模式和阵列的内存布局。后者可以使用order parameter of np.array()设置,其中:

  

指定阵列的内存布局。如果object不是数组,则新创建的数组将按C顺序排列(行主要),除非指定了'F',在这种情况下它将采用Fortran顺序(专业列)。

(如果object是一个数组,则可以保留更多选项,因为可以保留布局。)

正确的方法也可能取决于您所依赖的库。例如,对于linear regression in sklearn,每个样本都需要有一行。

[编辑]

在行中存储样本也与pandas.DataFrame个对象兼容:

>>> CIRCLES = np.array([[1, 3.14],
...                     [2, 12.56],
...                     [3, 28.26]])
>>> DF = DataFrame(CIRCLES, columns=['r', 'S'])
>>> DF.mean()
r     2.000000
S    14.653333
dtype: float64