【Numpy】改变数组维数

前言

本篇总结、介绍Numpy数组(ndarray)的基本操作之一——改变数组维数 [1]

1. atleast_1d、atleast_2d、atleast_3d

numpy.atleast_1d(*arys):将输入转换为维度至少为1的数组。如果输入为标量,则会被转换为一维数组,而更高维度的输入则保持不变

  • arys1, arys2…:类数组

numpy.atleast_1d返回一个数组或多个数组组成的列表(如果输入参数也为多个)。


注释:
numpy.atleast_1d返回的是arys1, arys2…的视图(view),而非副本(copy)


# 标量输入会被转换为一维数组
>>> arr1 = np.atleast_1d(1)
>>> arr1
array([1])
>>> arr1.shape
(1,)

# 高维输入(维度大于1)保持不变
>>> arr2 = np.arange(8).reshape(2,2,2)
>>> arr2
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])
>>> arr2.shape
(2, 2, 2)
>>> arr3 = np.atleast_1d(arr2)
>>> arr3
array([[[0, 1],
        [2, 3]],

       [[4, 5],
        [6, 7]]])
>>> arr3.shape
(2, 2, 2)
## numpy.atleast_1d返回的一般是数组的视图
>>> arr3 is arr2
True

# 多个输入参数
>>> arr4 = np.atleast_1d(1, [2,3,4])
>>> arr4
[array([1]), array([2, 3, 4])]

atleast_2d、atleast_3d和atleast_1d类似,只是分别将输入转换为维度至少为2和3的数组,在此不再赘述。

2. broadcast

3. broadcast_to

4. broadcast_arrays

5. expand_dims

numpy.expand_dims(a, axis):拓展数组形状。在指定的axis参数位置插入一个新的轴

  • a:类数组。输入数据
  • axis:整数、或整数列表/元组,可选参数(从Numpy 1.18.0版本开始,支持整数列表/元组作为输入参数)
    • axis的取值范围为[-a.ndim-1, a.ndim],除此之外的值会报错

注释:
numpy.expand_dims(a, axis)返回的是a的视图。


>>> arr1 = np.array([1,2])
>>> arr1
array([1, 2])
>>> arr1.shape
(2,)

>>> arr2 = np.expand_dims(arr1,axis=0)
>>> arr2
array([[1, 2]])
>>> arr2.shape
(1, 2)

>>> arr3 = np.expand_dims(arr1,axis=1)
>>> arr3
array([[1],
       [2]])
>>> arr3.shape
(2, 1)

>>> np.expand_dims(arr1,axis=2)
numpy.AxisError: axis 2 is out of bounds for array of dimension 2

注释:
numpy.expand_dims(a, axis=0)等同于a[np.newaxis, :]或a[np.newaxis];numpy.expand_dims(a, axis=0)等同于a[:, np.newaxis](np.newaxis可以用None代替)。

>>> arr1 = np.array([1,2])
>>> arr1
array([1, 2])
>>> arr1.shape
(2,)

>>> arr2 = arr1[np.newaxis,:]
>>> arr2
array([[1, 2]])
>>> arr2.shape
(1, 2)

>>> arr3 = arr1[:,np.newaxis]
>>> arr3
array([[1],
       [2]])
>>> arr3.shape
(2, 1)

6. squeeze

numpy.squeeze(a, axis=None):从a中移除长度为1的轴

  • a:类数组。输入数据
  • axis:None、或整数、或整数列表/元组,可选参数
    • None:移除所有长度为1的轴
    • 整数或整数列表/元组:移除指定的单个或多个轴。如果数组在指定的轴上的长度大于1,则会报错

注释:

  • numpy.squeeze返回的是a自身或其视图
  • 如果a在所有轴上的长度都为1,那么numpy.squeeze返回的是0维的Numpy数组,而非标量

>>> arr1 = np.array([[[0], [1], [2]]])
>>> arr1.shape
(1, 3, 1)
>>> np.squeeze(arr1).shape
(3,)
>>> np.squeeze(arr1,axis=0).shape
(3, 1)
>>> np.squeeze(arr1,axis=1).shape
ValueError: cannot select an axis to squeeze out which has size not equal to one

>>> arr2 = np.array([[1]])
>>> arr2.shape
(1, 1)
>>> np.squeeze(arr2)
array(1)
>>> np.squeeze(arr2).shape
() # 0维Numpy数组

Reference

[1]: https://numpy.org/doc/stable/reference/routines.array-manipulation.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值