【Numpy】重新排列元素

本文介绍了Numpy中数组的四种操作方法:flip、fliplr、flipud用于不同方向的翻转;reshape改变数组的形状;roll沿指定轴滚动数组元素;rot90在指定平面上旋转数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

本篇总结、介绍Numpy数组(ndarray)的基本操作之一——重新排列元素 [1]

1. flip、flipud、fliplr

numpy.flip(m, axis=None):沿给定轴(axis)翻转数组中元素的顺序。数组的形状被保留,但元素被重新排序

  • m:类数组。操作对象
  • axis:None、或整数、或整数序列,可选参数。指示沿其翻转的一个或多个轴
    • None:沿输入数组所有的轴翻转数组
>>> arr = np.arange(8).reshape((2,2,2))
>>> arr
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])

>>> np.flip(arr,axis=0)
array([[[4, 5],
        [6, 7]],

       [[0, 1],
        [2, 3]]])
>>> np.flip(arr,axis=1)
array([[[2, 3],
        [0, 1]],

       [[6, 7],
        [4, 5]]])
>>> np.flip(arr,axis=2)
array([[[1, 0],
        [3, 2]],

       [[5, 4],
        [7, 6]]])
>>> np.flip(arr,axis=[0,1])
array([[[6, 7],
        [4, 5]],

       [[2, 3],
        [0, 1]]])
>>> np.flip(arr)
array([[[7, 6],
        [5, 4]],

       [[3, 2],
        [1, 0]]])

numpy.fliplr(m):沿着轴-1翻转数组中元素的顺序(左右翻转)

  • m:类数组。至少是2维数组
>>> arr1 = np.arange(8).reshape((2,4))
>>> arr1
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])
>>> np.fliplr(arr1)
array([[3, 2, 1, 0],
       [7, 6, 5, 4]])

# 输入数组至少是2维的
>>> arr2 = np.array([0,1,2,3,4])
>>> np.fliplr(arr2)
ValueError: Input must be >= 2-d.

numpy.flipud(m):沿着轴-0翻转数组中元素的顺序(上下翻转)

>>> arr = np.arange(8).reshape((2,4))
>>> arr
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

>>> np.flipud(arr)
array([[4, 5, 6, 7],
       [0, 1, 2, 3]])

注释:

  • flip(m,0)相当于flipud(m)
  • flip(m,1)相当于fliplr(m)
  • flip(m,n)相当于m[…,::-1,…],其中::-1对应n的位置/轴
  • flip(m)相当于m[::-1,::-1,…,::-1]
  • flip(m,(0,1))相当于m[::-1,::-1,…],其中::-1对应0和1的位置/轴

2. reshape

相关内容请参考 [2]

3. roll

numpy.roll(a, shift, axis=None):沿给定的轴滚动数组元素,超出最后位置的元素将会滚动到第一个位置。即将a,沿着指定轴(axis)的方向,滚动指定长度(shift)

  • a:类数组
  • shift:整数或整数序列。元素滚动的长度或位数
    • 如果是整数序列,那么axis参数也必须是相同大小的序列,表示每个轴axis上滚动的长度或位数
    • 如果是整数,而axis参数是序列,表示在axis参数指定的每个轴上滚动相同的长度或位数
  • axis:None、或整数、或整数序列,可选参数
    • None:数组在移位之前会被展开,之后会恢复原始形状
>>> arr = np.arange(8).reshape((2,4))
>>> arr
array([[0, 1, 2, 3],
       [4, 5, 6, 7]])

>>> np.roll(arr,1,axis=0)
array([[4, 5, 6, 7],
       [0, 1, 2, 3]])
>>> np.roll(arr,1,axis=1)
array([[3, 0, 1, 2],
       [7, 4, 5, 6]])

>>> np.roll(arr,1,axis=[0,1])
array([[7, 4, 5, 6],
       [3, 0, 1, 2]])

>>> np.roll(arr,[1,2],axis=[0,1])
array([[6, 7, 4, 5],
       [2, 3, 0, 1]])

>>> np.roll(arr,2)
array([[6, 7, 0, 1],
       [2, 3, 4, 5]])

4. rot90

numpy.rot90(m, k=1, axes=(0, 1)):在指定平面内(axes)将数组m旋转90度

  • m:类数组。维度需大于等于2维
  • k:整数。数组旋转90度的次数
  • axes:数组选择的平面
>>> arr = np.arange(24).reshape(2,3,4)
>>> arr
array([[[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]],

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

>>> np.rot90(arr,1,axes=(0,1))
array([[[ 8,  9, 10, 11],
        [20, 21, 22, 23]],

       [[ 4,  5,  6,  7],
        [16, 17, 18, 19]],

       [[ 0,  1,  2,  3],
        [12, 13, 14, 15]]])
>>> np.rot90(arr,1,axes=(0,2))
array([[[ 3, 15],
        [ 7, 19],
        [11, 23]],

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

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

       [[ 0, 12],
        [ 4, 16],
        [ 8, 20]]])
>>> np.rot90(arr,axes=(1,2))
array([[[ 3,  7, 11],
        [ 2,  6, 10],
        [ 1,  5,  9],
        [ 0,  4,  8]],

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

注释:
本篇中介绍的函数返回的都是原数组的视图。


Reference

[1]: https://numpy.org/doc/stable/reference/routines.array-manipulation.html
[2]: https://blog.youkuaiyun.com/Graduate2015/article/details/118087684
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值