Python-Numpy语法总结-数组的排序及重塑

本文总结了Python Numpy库中用于一维和二维数组排序的方法,包括使用.argsort()按索引排序和.sort()按值排序。同时详细介绍了数组重塑的技巧,如.reshape()、.ravel()和.tile()函数的用法。

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

一维数组排序

np.random.seed(2)
a=np.random.randn(5)
print(a)
np.argsort(a) #返回一个索引的排序(默认升序)
[-0.41675785 -0.05626683 -2.1361961   1.64027081 -1.79343559]

array([2, 4, 0, 1, 3], dtype=int64)
print(a.argsort()) #等价于np.argsort(a)
[2 4 0 1 3]

二维数组排序

.argsort() 按索引排序

np.random.seed(2)
b=np.random.randn(4,3)
b.argsort(axis=0) #按列排序
b.argsort(axis=1) #按行排序
print("b=",b)
print(b.argsort(axis=0))
b= [[-0.41675785 -0.05626683 -2.1361961 ]
 [ 1.64027081 -1.79343559 -0.84174737]
 [ 0.50288142 -1.24528809 -1.05795222]
 [-0.90900761  0.55145404  2.29220801]]
[[3 1 0]
 [0 2 2]
 [2 0 1]
 [1 3 3]]

.sort() 按值排序

np.sort(b,axis=0) #每一列都会进行升序排列。
array([[-0.90900761, -1.79343559, -2.1361961 ],
       [-0.41675785, -1.24528809, -1.05795222],
       [ 0.50288142, -0.05626683, -0.84174737],
       [ 1.64027081,  0.55145404,  2.29220801]])
sorted(b,key=lambda x:x[1]) #按第2列排序
#默认进行升序排序,可以通过reverse参数进行设定
[array([ 1.64027081, -1.79343559, -0.84174737]),
 array([ 0.50288142, -1.24528809, -1.05795222]),
 array([-0.41675785, -0.05626683, -2.1361961 ]),
 array([-0.90900761,  0.55145404,  2.29220801])]
sorted(b,key=lambda x:x[1],reverse = True) #按第2列排序
#默认进行升序排序,可以通过reverse参数进行设定
[array([-0.90900761,  0.55145404,  2.29220801]),
 array([-0.41675785, -0.05626683, -2.1361961 ]),
 array([ 0.50288142, -1.24528809, -1.05795222]),
 array([ 1.64027081, -1.79343559, -0.84174737])]
b.sort() #直接作用于数组b,每一行都是升序
b
array([[-2.1361961 , -0.41675785, -0.05626683],
       [-1.79343559, -0.84174737,  1.64027081],
       [-1.24528809, -1.05795222,  0.50288142],
       [-0.90900761,  0.55145404,  2.29220801]])

数组的重塑

.reshape()

np.arange(15).reshape(3,5)
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

.ravel()

a=np.array([[1,2,3],[4,5,6]])
a.ravel()#将一个数组变成一个扁平数组。
array([1, 2, 3, 4, 5, 6])
a=np.array([[1,2,3],[4,5,6]])
a.ravel()#将一个数组变成一个扁平数组。
array([1, 2, 3, 4, 5, 6])
a.ravel(order="F") #order="F"表示数组以Fortran语言格式存储
array([1, 4, 2, 5, 3, 6])

.tile()

np.tile(np.array([[1,2],[3,4]]),(3,3))
array([[1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4],
       [1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4],
       [1, 2, 1, 2, 1, 2],
       [3, 4, 3, 4, 3, 4]])
### Numpy语法使用教程 NumpyPython 中用于科学计算的核心库,提供了高效的数组对象和工具。以下是关于 Numpy 的基本语法和使用方法: #### 1. 引入 Numpy 库 在使用 Numpy 前,需要先导入库。通常会用 `np` 作为其别名以方便使用[^2]。 ```python import numpy as np ``` #### 2. 创建数组 Numpy 提供了多种创建数组的方法。以下是一些常用的方式: - 使用列表创建数组: ```python a = np.array([1, 2, 3]) # 创建一个整数型数组 b = np.array([1.0, 2, 3]) # 创建一个浮点型数组 ``` 如果数组中包含浮点数,则整个数组会被转换为浮点类型[^2]。 - 创建特殊数组: ```python zeros_array = np.zeros((3, 4)) # 创建一个3x4的全零数组 ones_array = np.ones((2, 2)) # 创建一个2x2的全一数组 identity_matrix = np.eye(3) # 创建一个3x3的单位矩阵 ``` #### 3. 数组的基本属性 可以使用以下属性获取数组的信息: - 形状(shape):表示数组的维度大小。 - 数据类型(dtype):表示数组中元素的数据类型。 ```python array = np.array([[1, 2, 3], [4, 5, 6]]) print(array.shape) # 输出 (2, 3) print(array.dtype) # 输出 int64 或其他具体类型 ``` #### 4. 数组的操作 Numpy 支持直接对数组进行数学运算,无需显式使用循环[^1]。 - 基本算术运算: ```python a = np.array([1, 2, 3]) b = np.array([4, 5, 6]) addition = a + b # 加法 [5, 7, 9] subtraction = a - b # 减法 [-3, -3, -3] multiplication = a * b # 乘法 [4, 10, 18] division = a / b # 除法 [0.25, 0.4, 0.5] ``` - 矩阵运算: ```python matrix_a = np.array([[1, 2], [3, 4]]) matrix_b = np.array([[5, 6], [7, 8]]) dot_product = np.dot(matrix_a, matrix_b) # 矩阵乘法 transpose = matrix_a.T # 转置矩阵 ``` #### 5. 数组索引与切片 Numpy 支持类似于 Python 列表的索引和切片操作,但功能更强大。 - 索引: ```python array = np.array([[1, 2, 3], [4, 5, 6]]) element = array[0, 1] # 获取第一行第二列的元素,值为2 ``` - 切片: ```python slice_array = array[:, 1:] # 获取所有行的第二列及之后的元素 ``` #### 6. 数组重塑 可以使用 `reshape` 方法改变数组的形状,只要总元素数量保持不变即可。 ```python array = np.array([1, 2, 3, 4, 5, 6]) reshaped_array = array.reshape((2, 3)) # 将一维数组重塑为2x3的二维数组 ``` #### 7. 随机数生成 Numpy 提供了生成随机数的功能: ```python random_integers = np.random.randint(0, 10, size=(3, 3)) # 生成3x3的随机整数数组 random_floats = np.random.rand(4, 4) # 生成4x4的随机浮点数数组 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值