numpy中改变数组形状

18 篇文章 0 订阅

目录

1. np.reshape

2. np.resize

3. np.flatten 和 np.ravel

4. np.squeeze

5. np.expand_dims

6. np.transpose


1. np.reshape

np.reshape 可以在不改变数组数据的前提下改变数组的形状。

import numpy as np

a = np.arange(6) # 创建一个包含6个元素的数组
print(a)
# 输出: [0 1 2 3 4 5]

b = np.reshape(a, (2, 3)) # 改变数组形状为2行3列
print(b)
# 输出:
# [[0 1 2]
#  [3 4 5]]

特点:

  • 不改变数组的数据。
  • 必须保证新的形状与原始数组的总元素数相匹配。
  • 返回的是视图(如果可能),所以改变结果数组也可能改变原数组。

2. np.resize

.resize 可以改变数组的形状并且改变了原数组。

a = np.arange(6)
a.resize((2, 3))
print(a)
# 输出:
# [[0 1 2]
#  [3 4 5]]

特点:

  • 直接在原数组上进行操作,不返回新数组。
  • 如果新形状大于原始形状,会自动填充零。
  • 如果新形状小于原始形状,会丢弃多余的数据。

3. np.flatten 和 np.ravel

.flatten.ravel 能将多维数组降为一维。

a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.flatten() # 返回一个拷贝
c = a.ravel()   # 返回一个视图

# b 和 c 的输出相同,但修改 b 不会改变 a,修改 c 可能会改变 a

特点:

  • .flatten() 返回数组的一维副本,即使修改了副本,也不会影响原始数组。
  • .ravel() 返回数组的一维视图,修改视图可能会改变原始数据。

4. np.squeeze

.squeeze 方法用于移除数组形状中的单维度条目,即维数为1的维度。

a = np.array([[[1, 2, 3]]])
print(a.shape) # 输出: (1, 1, 3)

b = np.squeeze(a)
print(b.shape) # 输出: (3,)

特点:

  • 只能移除长度为1的维度。
  • 返回的是原数组的视图,所以修改后可能会影响原数组。

5. np.expand_dims

np.expand_dims 用于在指定位置插入一个新的轴来增加数组的维数。

a = np.array([1, 2, 3])
print(a.shape) # 输出: (3,)

b = np.expand_dims(a, axis=0)
print(b.shape) # 输出: (1, 3)

特点:

  • 用于增加数组的维度。
  • 返回原数组的视图。

注:在 NumPy 中,并没有一个名为 np.unsqueeze 的函数。扩充维度用 np.expand_dims 函数

6. np.transpose

np.transpose 是 NumPy 中用于转置数组的函数,也就是说,它可以改变数组的轴的顺序。对于二维数组,它会交换行和列,而对于多维数组,它可以重新排列轴的顺序。

对于二维数组,np.transpose 无需指定任何额外参数即可交换行和列:

import numpy as np

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

print(b)
# 输出:
# [[1 3 5]
#  [2 4 6]]

对于高维数组,np.transpose 可以接受一个轴编号的元组,指定轴的新顺序:

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

b = np.transpose(a, (1, 0, 2))

print(b)
# 输出:
# [[[ 1  2  3]
#   [ 7  8  9]]
# 
#  [[ 4  5  6]
#   [10 11 12]]]

在这个例子中,原来的轴顺序是(0, 1, 2),np.transpose 的参数 (1, 0, 2) 表示第一个轴和第二个轴交换了位置。

特点

  • np.transpose 不仅可以用于二维矩阵的转置,还可以处理任意维度的数组。
  • 转置操作返回的是原数组的一个新视图,而不复制数据。这意味着转置后的数组与原数组共享相同的数据缓冲区,修改其中一个可能会影响另一个。
  • 对于两维数组,.T 属性是转置操作的一个快捷方式:
b = a.T  # 等同于 np.transpose(a)

        这些方法各有特点和适用场景。.reshape.resize 适用于改变数组的多维形状,而 .flatten.ravel 适用于将多维数组降成一维。.squeeze 用于移除多余的轴(维度为1的),而 .expand_dims 用于增加额外的轴。通常情况下,.reshape 是最常用的改变数组形状的方法。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值