【发布时间】:2019-06-25 09:05:19
【问题描述】:
跟着numpy章节的“Python进行数据分析”,遇到这样的例子
#+BEGIN_SRC ipython :session my :export both :results output
arr = np.random.randn(5, 4)
print(arr)
#+END_SRC
#+RESULTS:
: [[-1.20142965 -0.65152972 2.04732169 -2.27351496]
: [ 1.0054648 -1.75728785 0.00923428 -0.65533187]
: [-2.1108598 -0.92347845 0.46443361 -0.48219059]
: [ 0.77617699 0.40242098 1.09411003 -0.6431827 ]
: [-0.59485821 1.22890193 -0.7498006 0.93518233]]
它表明
mean 和 sum 等函数采用可选轴参数,计算给定轴上的统计数据,从而生成一个维度更少的数组:
#+BEGIN_SRC ipython :session my :export both :results output
print(arr.mean(axis=1))
print(arr.sum(axis=0))
#+END_SRC
#+RESULTS:
: [-0.51978816 -0.34948016 -0.76302381 0.40738132 0.20485636]
: [-2.12550586 -1.70097313 2.86529902 -3.11903779]
然后这本书解释了
这里,arr.mean(1) 的意思是“计算各列的平均值”,其中 arr.sum(0) 的意思是“计算各行的总和”。
我认为 McKinnney 先生以相反的方式进行了完美的解释。
arr.sum(0) 表示计算跨列的行
arr.mean(1) 表示沿列或垂直方向向下行。
我的理解有问题吗?
【问题讨论】:
-
我认为“跨越”这个词太模棱两可了,因为它可以从两个方面来理解。
-
使用二维数组时,
axis的这些解释可能会令人困惑。使用axis=0或 3d 数组更容易描绘一维数组中发生的情况,您只需减少 3 个轴中的一个轴。有时添加keepdims=True参数会有所帮助。 -
一维数组是轴=0还是轴=1?默认情况下应该垂直或水平地查看数组吗? @hpaulj
-
一维数组只有一个轴。该轴上的均值或总和将数组简化为标量(可以认为是 0d 数组)。