numpy中轴处理

文章详细介绍了numpy库中关于轴的操作,包括轴的压缩、扩展、广播以及轴的交换和滚动。通过示例解释了np.newaxis、numpy.expand_dims、numpy.broadcast_to等功能的用法,还提到了数据拼接操作如concatenate和stack等。

numpy中轴参数的意义

指定的轴是被压缩的轴

沿轴的时候可以指定两个轴,即面被压缩,以面作为输入

numpy中轴转动

numpy中添加新轴

np.newaxis 在使用和功能上等价于 None,其实就是 None 的一个别名

import numpy as np
 
a=np.array([1,2,3])
 
b=a[np.newaxis,:]
c=a[:,np.newaxis]

numpy中轴扩展

numpy.expand_dims(a,axis)

扩展一个维就是把一个维往后挪,或者增加

numpy中广播数据维

numpy.broadcast_to函数将数组广播到新形状。它在原始数组上返回只 读视图。它通常不连续。如果新形状不符合 NumPy 的广播规则,该函数可能会抛出ValueError。

numpy.broadcast_to(array,shape, subok)

import numpy as np

a = np.arange(4).reshape(1, 4)

print(">>>")
print(a.shape)
print(a)
print()

b = np.broadcast_to(a, (4, 4))
print(">>>")
print(b.shape)
print(b)

>>>
(1, 4)
[[0 1 2 3]]

>>>
(4, 4)
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

numpy中缩减轴

numpy交换两个轴

numpy.swapaxes(arr,axis1, axis2)

其中:

  • arr:要交换其轴的输入数组

  • axis1:对应第一个轴的整数

  • axis2:对应第二个轴的整数

numpy滚动轴

numpy.rollaxis()函数向后滚动特定的轴,直到一个特定位置。这个函数接受三个参数:

numpy.rollaxis(arr,axis, start)

其中:

  • arr:输入数组

  • axis:要向后滚动的轴,其它轴的相对位置不会改变

  • start:默认为零,表示完整的滚动。会滚动到特定位置。

a = np.arange(24).reshape(2, 3, 4)
print(">>>")
print(a.shape)
print(a)
print()

roll = np.rollaxis(a, 2) # 把第2个轴滚动到0维位置
print(">>>")
print(roll.shape)
print(roll)
print()

roll2 = np.rollaxis(a, 2, 1) # 把第2个轴滚动到1维位置
print(">>>")
print(roll2.shape)
print(roll2)
print()


>>>
(2, 3, 4)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

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

>>>
(4, 2, 3)
[[[ 0  4  8]
  [12 16 20]]

 [[ 1  5  9]
  [13 17 21]]

 [[ 2  6 10]
  [14 18 22]]

 [[ 3  7 11]
  [15 19 23]]]

>>>
(2, 4, 3)
[[[ 0  4  8]
  [ 1  5  9]
  [ 2  6 10]
  [ 3  7 11]]

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

numpy中数据拼接操作concatenate

concatenate:沿现有轴加入一系列数组

stack:沿新轴加入一系列数组,即stack(arrays, axis=0)

column_stack:把1维数组当作列堆叠成二维数组

为了向后兼容

dstack:沿深度方向堆叠数组

hstack:沿水平方法堆叠数组

vstack:沿垂直方向堆叠数组

<think>好的,用户想了解NumPy中关于(axis)的计算方法,特别是如何沿着特定的进行操作。首先,我需要回忆NumPy中轴的基本概念,并整理相关的操作示例。 用户提到的引用中有引用[2]提到xt::sum(array, {0, 1}),虽然这是C++的示例,但的概念在NumPy中类似。NumPy中的从0开始计数,比如二维数组的0是行,1是列。需要解释清楚不同维度的数组对应的方向。 接下来,常见的沿操作包括求和(sum)、均值(mean)、最大值(max)等。需要举例说明这些函数如何使用axis参数。例如,np.sum(arr, axis=0)对列求和,结果减少一个维度。同时,需要注意keepdims参数的作用,保持维度不变可能在某些情况下有用,比如广播机制。 另外,用户可能对高维数组(如三维)的操作感到困惑,需要用具体例子说明,比如三维数组的形状(2,3,4)中,axis=0、1、2分别对应的操作方向。例如,沿着axis=0拼接数组,会增加该维度的大小。 还需要提到np.apply_along_axis函数,允许用户自定义函数沿着特定应用。这部分可以举一个标准化数据的例子,比如对每一行进行标准化处理。 注意引用中的相关材料,比如引用[2]中的求和示例,可以结合到回答中。另外,引用[4]提到的percentile可能也涉及参数,但用户的问题主要集中在的操作上,可能不需要深入,但可以提到np.percentile也有axis参数,用于沿特定计算分位数。 最后,生成的相关问题需要涵盖的理解、高维数组处理、性能优化和应用场景,帮助用户进一步学习。</think>在NumPy中,(axis)是定义数组操作方向的核心概念。以下通过四个步骤说明的计算方法: ### 一、的定义 - 二维数组示例:对于形状为$(m,n)$的矩阵 - `axis=0`:垂直方向(沿行操作) - `axis=1`:水平方向(沿列操作) - 三维数组示例:对于形状为$(p,m,n)$的张量 - `axis=0`:深度方向 - `axis=1`:垂直方向 - `axis=2`:水平方向 ```python import numpy as np arr = np.array([[1,2],[3,4],[5,6]]) # 沿axis=0求和(纵向压缩为1行) print(np.sum(arr, axis=0)) # 输出[9 12] # 沿axis=1求最大值(横向压缩为1列) print(np.max(arr, axis=1)) # 输出[2 4 6] ``` ### 二、常用操作 1. **聚合计算** ```python # 沿axis=1计算均值(保留维度) mean_col = np.mean(arr, axis=1, keepdims=True) ``` 2. **拼接操作** ```python # 沿axis=0垂直堆叠(增加行数) np.concatenate([arr, arr], axis=0) ``` 3. **广播机制** ```python # 沿axis=1进行广播减法 arr - np.mean(arr, axis=1, keepdims=True) ``` ### 三、高维数组操作 对于三维数组$shape=(2,3,4)$: ```python cube = np.random.rand(2,3,4) # 沿axis=0求和 → shape=(3,4) print(np.sum(cube, axis=0)) # 沿axis=2取最大值 → shape=(2,3) print(np.max(cube, axis=2)) ``` ### 四、自定义操作 使用`np.apply_along_axis`实现行标准化: ```python def normalize(x): return (x - np.mean(x)) / np.std(x) normalized_arr = np.apply_along_axis(normalize, 1, arr) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wugou2014

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值