当前位置:   article > 正文

numpy巨全的api及详细介绍(适合小白!机器学习前置技术栈)_numpy api

numpy api

一.ndarray属性

1.ndarray.shape 形状

表示数组的形状,也就是数组中各维度的大小。该属性的值为一个元组,例如,一个m行n列的二维数组,其shape属性的值为(m, n)。

2.ndarray.nidim 维度

表示数组的维度,也就是秩(rank)。秩是轴的数量,一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axis),也就是维度(dimensions)。

3.ndarray.size 数组元素的总数

表示数组元素的总数。这个属性可以通过数组各维度的大小相乘得到。

4.ndarray.dtype 数组的数据类型

表示数组的数据类型。这可以是任何NumPy支持的数据类型,如int、float、complex等。

5.ndarray.itemsize 每个元素的字节大小

表示数组中每个元素的大小,以字节为单位。

6.ndarray.data 返回一个包含数组数据的缓冲区对象

代码展示

import numpy as np
a = np.arange(15).reshape(3, 5) # 这里3为矩阵的行数,5为矩阵的列数
print(a)
print('数组的形状:', a.shape)
print('数组轴的个数:', a.ndim)
print('数组元素类型:', a.dtype)
print('数组中每个元素的字节大小:', a.itemsize)
print('数组元素的总个数:', a.size)
print('类型查询:', type(a))
print(a.data)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

查询结果
ndarray属性

二.ndarray的创建

(一). ndarray介绍

  • NumPy数组是一个多维的数组对象(矩阵),称为ndarray(N-Dimensional Array)
  • 具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点
  • 注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型。

(二). ndarray 的创建

1.创建数组

  • array(p_object,dtype = None)
import numpy as np
a = np.array([2, 3, 4]) # 整数类型数组
b = np.array([1.2, 3.5, 5.1]) # 浮点
print(a)
print(b)
# 运行结果
# [2 3 4]
# [1.2 3.5 5.1]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • zeros(shape, dtype=None, order=‘C’) 函数zeros创建一个全是0的数组,
a1 = np.zeros((3,4))
print(a1)
# 运行结果
#[[0. 0. 0. 0.]
# [0. 0. 0. 0.]
# [0. 0. 0. 0.]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • ones(shape, dtype=None, order=‘C’) 函数ones创建一个全1的数组,
a2 = np.ones((3,4))
print(a2)
# 运行结果
#[[1. 1. 1. 1.]
# [1. 1. 1. 1.]
# [1. 1. 1. 1.]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • empty(shape, dtype=None, order=‘C’) 函数empty创建一个内容随机并且依赖于内存状态的数组。
a3= np.empty((2, 3))
print('数组a3: ', a3)
print(a3.dtype)
# 运行结果
#数组empty1:  [[6.95073433e-310 6.95073433e-310 0.00000000e+000]
# [0.00000000e+000 0.00000000e+000 0.00000000e+000]]
# float64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • arange(start=None), 类似 python 的 range() ,创建一个一维 ndarray 数组。
a4 = np.arange(15).reshape(3,5)
print(a4)
# 运行结果
# [[ 0  1  2  3  4]
# [ 5  6  7  8  9]
# [10 11 12 13 14]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • full() ,用特定值填充数组
full_array = np.full((2, 3), 5)
print("特定填充值数组:\n", full_array)
# 运行结果
# 特定填充值数组:
# [[5 5 5]
#  [5 5 5]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • matrix(), 是 ndarray 的子类,只能生成 2 维的矩阵
a5 = np.mat("1 2;3 4")
print(a5)
a6 = np.matrix("1,2;3,4")
print(a6)
a7 = np.matrix([[1, 2, 3, 4], [5, 6, 7, 8]])
print(a7)
# 运行结果
# [[1 2]
# [3 4]]

# [[1 2]
# [3 4]]

#[[1 2 3 4]
# [5 6 7 8]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2. 创建随机数矩阵

import numpy as np

# 抽取一个3x4的二维数组  
matrix = np.random.randn(3, 4)  
print(matrix)  
# 输出一个3x4的二维数组,包含随机浮点数,例如:  
# [[ 0.1234 -0.4567  0.7890 -1.2345]  
#  [-0.5678  0.9012 -0.3456  0.7890]  
#  [ 0.2345 -0.1234  0.5678 -0.9012]]


# 生成指定维度大小(3行4列)的随机多维浮点型数据(二维), rand固定区间0.0 ~ 1.0
arr = np.random.rand(3, 4)
print(arr)
print(type(arr))

# 生成指定维度大小(3行4列)的随机多维整型数据(二维), randint()可指定区间(-1, 5)
arr = np.random.randint(-1, 5, size=(3, 4))
print(arr)
print(type(arr))

#生成指定维度大小(3行4列)的随机多维浮点型数据(二维), uniform()可以指定区间(-1, 5)产生-1到5之间均匀分布的样本值
arr = np.random.uniform(-1, 5, size=(3, 4))
print(arr)
print(type(arr))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

(三)数组的转置 索引 切片 形状改变 连接

1. 转置

使用 np.transpose() 或 np.ndarray.T 对数组进行转置操作。

2. 索引

# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6]])

# 获取特定元素
print("第一个元素:", my_array[0, 0])
print("最后一个元素:", my_array[-1, -1])

# 获取特定行
print("第一行:", my_array[0, :])

# 运行结果
# 第一个元素: 1
# 最后一个元素: 6
# 第一行: [1 2 3]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. 切片

# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 获取子数组
sub_array = my_array[0:2, 1:3]
print("子数组:\n", sub_array)
# 运行结果
# 子数组:
# [[2 3]
#  [5 6]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

4. 形状改变

np.reshape()、np.ravel() 或 np.flatten()改变形状

# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6]])

# 改变数组形状
reshaped_array = np.reshape(my_array, (3, 2))
print("改变形状后的数组:\n", reshaped_array)
# 运行结果
# 改变形状后的数组:
# [[1 2]
# [3 4]
# [5 6]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5. 连接

np.concatenate()、np.vstack()、np.hstack() 或 np.column_stack() 连接数组

import numpy as np

# 创建数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 沿水平方向连接数组
hstacked_array = np.hstack((array1, array2))
print("水平连接的数组:\n", hstacked_array)

# 沿垂直方向连接数组
vstacked_array = np.vstack((array1, array2))
print("垂直连接的数组:\n", vstacked_array)

# 运行结果
# 水平连接的数组:
# [[1 2 5 6]
# [3 4 7 8]]
# 垂直连接的数组:
# [[1 2]
# [3 4]
# [5 6]
# [7 8]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

(四). 数组拆分

使用 np.split()、np.vsplit()、np.hsplit() 或 np.array_split() 对数组进行拆分操作。

# 创建数组
my_array = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 沿垂直方向拆分数组
split_arrays = np.vsplit(my_array, 3)
print("垂直拆分的数组:")
for arr in split_arrays:
    print(arr)

# 沿水平方向拆分数组
split_arrays = np.hsplit(my_array, 3)
print("水平拆分的数组:")
for arr in split_arrays:
    print(arr)
# 运行结果
# 垂直拆分的数组:
# [[1 2 3]]
# [[4 5 6]]
# [[7 8 9]]
# 水平拆分的数组:
# [[1]
#  [4]
#  [7]]
# [[2]
#  [5]
#  [8]]
# [[3]
#  [6]
#  [9]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

(五) 等差等比数列

# 创建一个从0开始,到1结束,包含5个元素的等差数列  
linspace_seq = np.linspace(0, 1, 5)  
print(linspace_seq)  # 输出: [0.   0.25 0.5  0.75 1.  ]

# 创建一个从1开始,到100结束,包含5个元素的等比数列  
geomspace_seq = np.geomspace(1, 100, 5)  
print(geomspace_seq)  # 输出: [   1.    5.12  26.12  134.22 685.41]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

三. Numpy的内置函数

(一). 基本函数

# 基本函数如下
np.ceil(): 向上最接近的整数,参数是 number 或 array
np.floor(): 向下最接近的整数,参数是 number 或 array
np.rint(): 四舍五入,参数是 number 或 array
np.isnan(): 判断元素是否为 NaN(Not a Number),参数是 number 或 array
np.multiply(): 元素相乘,参数是 number 或 array
np.divide(): 元素相除,参数是 number 或 array
np.abs():元素的绝对值,参数是 number 或 array
np.where(condition, x, y): 三元运算符,x if condition else y
# 注意: 需要注意multiply/divide 如果是两个ndarray进行运算 shape必须一致

    
# 示例代码
arr = np.random.randn(2, 3)
print(arr)
print(np.ceil(arr))
print(np.floor(arr))
print(np.rint(arr))
print(np.isnan(arr))
print(np.multiply(arr, arr))
print(np.divide(arr, arr))
print(np.where(arr > 0, 1, -1))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

(二). 统计函数

np.mean(), np.sum():所有元素的平均值,所有元素的和,参数是 number 或 array
np.max(), np.min():所有元素的最大值,所有元素的最小值,参数是 number 或 array
np.std(), np.var():所有元素的标准差,所有元素的方差,参数是 number 或 array
np.argmax(), np.argmin():最大值的下标索引值,最小值的下标索引值,参数是 number 或 array
np.cumsum(), np.cumprod():返回一个一维数组,每个元素都是之前所有元素的 累加和 和 累乘积,参数是 number 或 array
 # 多维数组默认统计全部维度,axis参数可以按指定轴心统计,值为0则按列统计,值为1则按行统计。

    
# 实例代码
arr = np.arange(12).reshape(3, 4)
print(arr)
print(np.cumsum(arr))   # 返回一个一维数组, 每个元素都是之前所有元素的 累加和
print(np.sum(arr))      # 所有元素的和
print(np.sum(arr, axis = 0))  #数组的按列统计和
print(np.sum(arr, axis = 1))  #数组的按行统计和
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

(四). 比较函数

np.any(): 至少有一个元素满足指定条件,返回True
np.all(): 所有的元素满足指定条件,返回True

# 实例代码
arr = np.random.randn(2, 3)
print(arr)
print(np.any(arr > 0))
print(np.all(arr > 0))
  • 1
  • 2
  • 3
  • 4
  • 5

(五). 去重函数

np.unique():找到唯一值并返回排序结果,类似于Python的set集合
  • 1
# 实例代码
arr = np.array([[1, 2, 1], [2, 3, 4]])
print(arr)
print(np.unique(arr))
  • 1
  • 2
  • 3
  • 4

(六). 排序函数

arr = np.array([1, 2, 34, 5])
print("原数组arr:", arr)

# np.sort()函数排序, 返回排序后的副本
sortarr1 = np.sort(arr)
print("numpy.sort()函数排序后的数组:", sortarr1)

# ndarray直接调用sort, 在原数据上进行修改
arr.sort()
print("数组.sort()方法排序:", arr)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

四. 数组线性代数运算

数组的点积运算

# 创建数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 数组的点积运算
dot_product = np.dot(array1, array2)
print("数组的点积运算:\n", dot_product)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

数组的逆运算

# 数组的逆运算
inv_array = np.linalg.inv(array1)
print("数组的逆运算:\n", inv_array)
  • 1
  • 2
  • 3

数组的行列式

# 数组的行列式
det_array = np.linalg.det(array1)
print("数组的行列式:", det_array)

  • 1
  • 2
  • 3
  • 4

数组的特征值

# 数组的特征值
eigvals_array = np.linalg.eigvals(array1)
print("数组的特征值:", eigvals_array)
  • 1
  • 2
  • 3

线性方程组的解

# 数组的线性方程组求解
b = np.array([5, 7])
solve_array = np.linalg.solve(array1, b)
print("线性方程组的解:", solve_array)
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/792032
推荐阅读
相关标签
  

闽ICP备14008679号