numpy的数组运算,切片以及布尔类型索引以及花式和转置

发布时间 2023-10-20 23:56:07作者: YaYa000

数组运算

import numpy as np
# 创建两个数组
data_0 = np.array([[1,2,3],[4,5,6]])
data_1 = np.array([[5,6,7],[7,8,9]])
# 将两个数组进行相加
data_0 + data_1

 

输出结果为:

array([[ 6,  8, 10],
       [11, 13, 15]])

数组相减,乘,除 与数组相加差不多,都是对应元素进行相加,乘,除。


 

数组与数的计算

# 前面已经加载了numpy这个包,这里就不继续加载了
data_0 = np.array([[1,2,3],[4,5,6]])
# 数组与数相加
6 + data_0
​
​
#-------------------------下面是输出结果---------------------------
array([[ 7,  8,  9],
       [10, 11, 12]])

 

下面为数组与数的减法运算:

print(6 - data_0)
print(data_0 - 6)
​
​
# -------------------------下面是输出结果--------------------------
[[5 4 3]
 [2 1 0]]
--------------
[[-5 -4 -3]
 [-2 -1  0]]

数组与数的乘法运算和数组与数的加法运算是一样的

数组与数的减法运算和数组与数的除法运算是一样的


 

数组的切片和索引

一维数组的切片和索引

arr = np.arange(9)
print(arr)
# 下面为数组的索引方式:
#  索引下标为6的元素
print(arr[6])
# 索引下标从3到6的元素,此为左闭右开区间
print(arr[3:6])
# 以步长为3索引下标从1到8的元素,此区间为左闭右开
print(arr[1:8:3])
​
​
# -------------------------下面是输出结果---------------------------
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
-----------------------------------
6
-----------------------------------
array([3, 4, 5])
-----------------------------------
array([1, 4, 7])

 

多维数组的切片和索引(可以想象成成矩阵)

arrs = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arrs)
# 打印数组下标为1的元素(小数组)
print(arrs[1])
# 打印横坐标为2,纵坐标为2的元素
print(arrs[2,2])
# 打印第二列的元素
print(arrs[:,2])
# 打印第0行和第1行的元素
print(arrs[:2])
# 打印第0行和第1行 与 第0列和第1列元素 相交 的元素
print(arrs[0:2,0:2])
# 打印第一行里面元素的纵坐标为0和1的元素
print(arrs[1,:2])
​
​
# ----------------------------下面是输出结果-----------------------------
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
----------------------
array([4, 5, 6])
----------------------
9
----------------------
array([3, 6, 9])
----------------------
array([[1, 2, 3],
       [4, 5, 6]])
----------------------
array([[1, 2],
       [4, 5]])
----------------------
array([4, 5])

 

[2: :2] 从下标为2到最后,步长为2


花式数组

# 先创建一个空数组,并给这个数组分配好了空间
arrss = np.empty((4,4))
# 进行for循环
for i in range(4):
    # 利用循环给数组增添元素,这里arange也是左闭右开区间
    arrss[i] = np.arange(i,i+4)   # arange返回的是数组
arrss
# 打印第一行和第三行的元素
print(arrss[[1,3]])
# 打印横坐标为1,纵坐标为3的元素 和 横坐标为3,纵坐标为3的元素
print(arrss[[1,3],[3,3]])
​
​
# --------------------------下面是输出结果-------------------------
array([[0., 1., 2., 3.],
       [1., 2., 3., 4.],
       [2., 3., 4., 5.],
       [3., 4., 5., 6.]])
----------------------------
array([[1., 2., 3., 4.],
       [3., 4., 5., 6.]])
----------------------------
array([4., 6.])

 


布尔型索引的使用

name = np.array(['Jack','Tom','Lily','Rose'])
print(name)
numbers = np.array([[1,2,3,4],[3,4,5,6],[5,6,7,8],[7,8,9,10]])
print(numbers)
# 判断是否为Jack,其输出结果为布尔值
print(name=='Jack')z
# 相当于number[ True, False, False, False],即输出那个为True的值
print(numbers[name=='Jack'])
# 在为True的那一行找纵坐标为1的值
print(numbers[name=='Jack',:1])
​
​
# ----------------------------下面是输出结果---------------------------
array(['Jack', 'Tom', 'Lily', 'Rose'], dtype='<U4')
-----------------------------------------------------
array([[ 1,  2,  3,  4],
       [ 3,  4,  5,  6],
       [ 5,  6,  7,  8],
       [ 7,  8,  9, 10]])
-----------------------------------------------------
array([ True, False, False, False])
-----------------------------------------------------
array([[1, 2, 3, 4]])
-----------------------------------------------------
array([[1]])

 

这种情况 也可以和正太分布相结合


数组的转置

arr_0 = np.arange(16).reshape(4,4)
arr_0
# 数组的转置
arr_0.T。
# 里面可以加参数 arr_0.transpose(1,2,0) 默认是arr_0.transpose(0,1,2),即表示轴的交换。没加参数默认为数组转置。
# arr_0.transpose()   
# # 0轴和1轴进行交换
arr_0.swapaxes(1,0)  

 


 

常见一元通用函数

函数描述
sqrt 计算平方根 np.sqrt(数组名)
square 计算各元素平方 np.square(数组名)
abs,fabs 计算整数,浮点数或者复数的绝对值 np.abs(数组名)
ceil 向上取整 np.ceil()
floor 向下取整 np.floor
rint 四舍五入到最接近的整数 np.rint( )
isnan 返回 “哪些元素是空” 的布尔类型数组 np.isnan()
isfinite,isinf 返回哪些是有穷,哪些是无穷的布尔类型数组
arcos,arccosh,arcsin 三角函数
add 将数组中对应元素相加 np.add(数组1,数组2)
subtract 数组相减 np.subtract(数组1,数组2)
maximum 最大值计算
minimum 最小值计算
mod 求模运算