python-axis

在Python中,axis参数在许多库如NumPy、Pandas中是一个重要概念,它表示数据沿着哪个轴或维度进行操作。

NumPy

np.array()

对于一个二维数组(矩阵),axis=0表示操作沿着行(垂直方向),axis=1表示操作沿着列(水平方向)

# 创建一个 3x3 的数组
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 沿着 axis=0(行方向)求和
sum_axis0 = np.sum(arr, axis=0)
# 输出: array([12, 15, 18])

# 沿着 axis=1(列方向)求和
sum_axis1 = np.sum(arr, axis=1)
# 输出: array([ 6, 15, 24])

np.concatenate(a1,a2 axis=0)

np.concatenate主要用于在指定轴上对多个数组进行拼接,拼接的轴的长度必须相同,例如:

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

c = np.concatenate((a, b), axis=0)
d = np.concatenate((a, b), axis=1)

print(c)
print(d)
#[[1 2]
# [3 4]
# [5 6]
# [7 8]]

#[[1 2 5 6]
# [3 4 7 8]]

np.append(arr, values, axis=None)

np.append是在数组的末尾添加元素,其使用方法为:

np.append(arr, values, axis=None)

其中,arr为原数组,values为需要添加的值,axis为需要添加的轴(如果不指定axis,则会将数组先展开成1D数组,再进行添加)。如果添加的值是一个数组,则会将数组在指定的轴上与原数组进行拼接。

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])

c = np.append(a, b) # 在1D数组上进行拼接
d = np.append(a, b, axis=0) # 在行上进行拼接
e = np.append(a, b, axis=1) # 在列上进行拼接

print(c)
print(d)
print(e)
#[1 2 3 4 5 6 7 8]

#[[1 2]
# [3 4]
# [5 6]
# [7 8]]

#[[1 2 5 6]
# [3 4 7 8]]

需要注意的是,np.append返回的是新的数组,不会改变原数组。在原始数据集比较大时,推荐使用np.concatenate()函数进行数组拼接。

np.stack(array, axis=0)

沿着新轴连接数组的序列,此方法与拼接不同

axis 参数指定新轴在结果尺寸中的索引。例如,如果axis=0,它将是第一个维度,如果axis=-1,它将是最后一个维度。

一维数组

import numpy as np

# 定义两个一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 在轴0方向连接这两个数组
c = np.stack((a, b), axis=0)

# 输出结果
print(c.shape)
print(c)
# 输出:
# (2,3)
# [[1 2 3]
# [4 5 6]]

# 在轴1方向连接这两个数组
d = np.stack((a, b), axis=1)

# 输出结果
print(d.shape)
print(d)
# 输出:
# (3,2)
# [[1 4]
# [2 5]
# [3 6]]
  • (2,3)(3,2)中的2是怎么来的:因为有ab两个array

  • axis指定了要增加的维度:例如axis=0表示在第一维度上增加,因此(2,3)中的2位于第一维度。而axis=1表示在第二维度上增加,因此(3,2)中的2位于第二维度。

二维数组

两个要素:

  • stack堆叠的 方向

  • stack堆叠后增加的 维度

# 定义一个2行3列的二维数组
arr1 = np.array([[1, 2, 3], [4, 5, 6]])

# 定义一个2行3列的二维数组
arr2 = np.array([[7, 8, 9], [10, 11, 12]])

# 在轴0方向连接这两个数组
arr3 = np.stack((arr1, arr2), axis=0)

# 输出结果
print(f"Arr3 shape:{arr3.shape}")
print(arr3)
# Arr3 shape:(2, 2, 3)
# [[[ 1 2 3]
# [ 4 5 6]]

# [[ 7 8 9]
# [10 11 12]]]

# 在轴1方向连接这两个数组
arr4 = np.stack((arr1, arr2), axis=1)

# 输出结果
print(f"Arr4 shape:{arr4.shape}")
print(arr4)
# Arr4 shape:(2, 2, 3)
# [[[ 1 2 3]
# [ 7 8 9]]

# [[ 4 5 6]
# [10 11 12]]]

# 在轴2方向连接这两个数组
arr5 = np.stack((arr1, arr2), axis=2)

# 输出结果
print(f"Arr5 shape:{arr5.shape}")
print(arr5)
# Arr5 shape:(2, 3, 2)
# [[[ 1 7]
# [ 2 8]
# [ 3 9]]

# [[ 4 10]
# [ 5 11]
# [ 6 12]]]

这里的2就是指的ab,而2放在什么位置是根据axis来确定的

Pandas

在Pandas中,axis参数用于在DataFrame(类似于二维表格的数据结构)上执行操作,如汇总、排序和删除列或行等。与NumPy类似,axis=0表示操作沿着行(垂直方向),axis=1表示操作沿着列(水平方向)

import pandas as pd

# 创建一个 DataFrame
data = {'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]}
df = pd.DataFrame(data)
print(df)
# A B C
# 0 1 4 7
# 1 2 5 8
# 2 3 6 9
# 删除名为 'A' 的列,沿着 axis=1(列方向)
df = df.drop('A', axis=1)
print(df)
# B C
# 0 4 7
# 1 5 8
# 2 6 9
# 计算每一行的和,沿着 axis=1(列方向)
row_sum = df.sum(axis=1)
print(row_sum)
# 0 11
# 1 13
# 2 15

Reference

[1] numpy.stack最通俗的理解: https://blog.csdn.net/qq_17550379/article/details/78934529

------------------------------- 本文结束啦❤感谢您阅读-------------------------------
赞赏一杯咖啡