为什么使用轴参数时在numpy中处理多维数组的形状不同

问题描述 投票:0回答:1

我是python语言的菜鸟,对数组的形状有疑问。据我了解,如果这样创建3维numpy数组temp = numpy.asarray([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4], [5, 5, 5]], [[6, 6, 6], [7, 7, 7], [8, 8, 8]]]),形状如下图所示:shape of 3 dimensional array要计算总和,中位数等,可以定义一个轴以计算值,例如

>>> print(numpy.median(temp, axis=0))
[[3. 3. 3.] [4. 4. 4.] [5. 5. 5.]]
>>> print(numpy.median(temp, axis=1))
[[1. 1. 1.] [4. 4. 4.] [7. 7. 7.]]
>>> print(numpy.median(temp, axis=2))
[[0. 1. 2.] [3. 4. 5.] [6. 7. 8.]]

对我来说,像这样的形状shape of 3 dimensional array using axis parameter为什么使用axis参数计算总和,中位数等时形状会有所不同?

python arrays numpy axis
1个回答
0
投票

您的numpy数组temp = numpy.asarray([[[0, 0, 0], [1, 1, 1], [2, 2, 2]], [[3, 3, 3], [4, 4, 4], [5, 5, 5]], [[6, 6, 6], [7, 7, 7], [8, 8, 8]]])实际上看起来像这样:

     axis=2
       |
       v
[[[0 0 0]  <-axis=1
  [1 1 1]
  [2 2 2]] <- axis=0

 [[3 3 3]
  [4 4 4]
  [5 5 5]]

 [[6 6 6]
  [7 7 7]
  [8 8 8]]]

因此,当您对特定轴取中值时,numpy保持轴的其余部分不变,并沿指定轴查找中值。为了更好地理解,我将在@hpaulj的注释中使用建议的数组:

temp:

     axis=2
       |
       v
[[[ 0  1  2  3] <-axis=1
  [ 4  5  6  7]
  [ 8  9 10 11]] <- axis=0

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

然后我们有:

numpy.median(temp, axis=0):

#The first element is median of [0,12], second one median of [1,13] and so on.
[[ 6.  7.  8.  9.]
 [10. 11. 12. 13.]
 [14. 15. 16. 17.]]


np.median(temp, axis=1)

#The first element is median of [0,4,8], second one median of [1,5,9] and so on.
[[ 4.  5.  6.  7.]
 [16. 17. 18. 19.]]


np.median(temp, axis=2)

#The first element is median of [0,1,2,3], second one median of [4,5,6,7] and so on.
[[ 1.5  5.5  9.5]
 [13.5 17.5 21.5]]
© www.soinside.com 2019 - 2024. All rights reserved.