Numpy中numpy.concatenate()函数、numpy.delete()函数、numpy.mean()函数参数axis=0与axis=1的区分

Numpy中函数参数axis=0与axis=1的区分

1.问题描述

在使用Numpy中某些函数时,可能会遇到aixs=0与aixs=1的理解困惑。例如:
对于函数1
数组拼接函数numpy.concatenate((a1,a2,…), axis=0),其中ai为数组类型

1)当参数为一维数组时

下面代码

import numpy as np

a1=np.array([1,2,3])
a2=np.array([4,5,6])
a3=np.array([7,8,9])

print(np.concatenate((a1,a2,a3),axis=0))
print(np.concatenate((a1,a2,a3),axis=1))

结果为:
在这里插入图片描述
只能在aixs=0方向拼接,且结果仍然为一维数组。

2)当参数为二维数组时

下面代码

import numpy as np

a1=np.array([[1,2,3],
             [3,2,1]])
a2=np.array([[4,5,6],
             [6,5,4]])
a3=np.array([[7,8,9],
             [9,8,7]])

print(np.concatenate((a1,a2,a3),axis=0))
print(np.concatenate((a1,a2,a3),axis=1))

结果为:
在这里插入图片描述
当aixs=0时,沿着行增长的方向进行拼接
当aixs=1时,沿着列增长的方向进行拼接

对于函数2
numpy.delete(arr,obj,axis=None)
arr:输入向量 (需要处理的矩阵)
obj:表明哪一个子向量应该被移除。可以为整数或一个int型的向量
axis:表明删除哪个轴的子向量,若默认,则返回一个被拉平的向量
参数aixs可取:

  • axis=None:arr会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵。
    axis = 0:arr按行删除
    axis = 1:arr按列删除

例如:下面代码

import numpy as np

input_array=np.array([[ 0,  1,  2,  3],
             [ 4,  5,  6,  7],
             [ 8,  9, 10, 11]])

output_array1=np.delete(input_array,1,axis=None)
output_array2=np.delete(input_array,1,axis=0)
output_array3=np.delete(input_array,1,axis=1)

print(output_array1)
print('---')
print(output_array2)
print('---')
print(output_array3)
print('---')

output_array4=np.delete(input_array,[1,2],axis=None)
output_array5=np.delete(input_array,[1,2],axis=0)
output_array6=np.delete(input_array,[1,2],axis=1)

print(output_array4)
print('---')
print(output_array5)
print('---')
print(output_array6)
print('---')

结果为:

[ 0 2 3 4 5 6 7 8 9 10 11]

[[ 0 1 2 3]
[ 8 9 10 11]]

[[ 0 2 3]
[ 4 6 7]
[ 8 10 11]]

[ 0 3 4 5 6 7 8 9 10 11]

[[0 1 2 3]]

[[ 0 3]
[ 4 7]
[ 8 11]]

对于函数3:numpy.mean函数
代码如下:

扫描二维码关注公众号,回复: 15225811 查看本文章
import numpy as np

input_array=np.array([[ 0,  1,  2,  3],
             [ 4,  5,  6,  7],
             [ 8,  9, 10, 11]])

output_array1=np.mean(input_array,axis=None)
output_array2=np.mean(input_array,axis=0)
output_array3=np.mean(input_array,axis=1)

print(output_array1)
print('---')
print(output_array2)
print('---')
print(output_array3)
print('---')

结果如下:
在这里插入图片描述
对于这个结果可能有些不理解,代码中axis=0明明按行,为什么结果却是[4,5,6,7]而不是[1.5,5.5,9.5]呢?应该如何去理解axis呢?

2.理解方法

axis=0和axis=1的图解如下:
在这里插入图片描述有人
图片来自:https://www.cnblogs.com/rrttp/p/8028421.html
在numpy的函数中:

  • axis=0表示按照行索引增长的方向或者每一列进行函数方法运算。
  • axis=1表示按照列索引增长的方向或者每一行进行函数方法运算。

对于函数1,numpy.concatenate()函数,当axis=0时,按照行索引增长的方向拼接矩阵。
对于函数2,numpy.delete()函数,当axis=0时,按照行索引增长的方向按照要求删除矩阵的某些数值。
对于函数3,numpy.mean()函数,当axis=0时,按照行索引增长的方向求平均值,也就是沿着每列求平均值!!!

猜你喜欢

转载自blog.csdn.net/weixin_45582028/article/details/103834121