假设您有一个存储多变量样本数据的矩阵(二维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
这绝对不方便。
答案 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