创建数组:
from numpy import * # 将NumPy库全部导入,不建议这样做,因为容易引起冲突
list1 = [[1, 0, 0, 0], # 创建一个元素为列表的列表,然后将这个列表转换为数组,就成了二维数组
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1]]
arr1 = array(list1) # 将列表转换为二维数组
print(list1) # 打印列表,列表为横着,元素之间使用都好隔开
print(arr1) # 打印数组,数组为四边形
import numpy as np #一般使用这种方法
list2 = [1, 2, 3, 4, 5] # 创建列表
arr2 = np.array(list2) # 转换为一维数组
print(list2)
print(arr2)
————之后导入都使用第二种方法,不再继续写导入语句————
数组转矩阵:
arr = np.random.rand(4, 4) # 生成4*4的随机数组,python默认生成随机数是0-1的小数
print(arr) # 打印数组
randMat = np.mat(arr) # 将数组转换为矩阵(书上前边标着matrix,但是在PyCharm里矩阵数组显示一样)
print(randMat) # 打印矩阵
invRandMat = randMat.I # 求逆矩阵
print(randMat * invRandMat) # 矩阵和其逆矩阵相乘(得到的应该是单位矩阵,对角线为1,其余为0,但是计算机处理会产生误差)
print(np.eye(4)) # 打印4*4的单位矩阵
数组运算:
a = np.array([1, 2, 3, 4, 5])
b = np.array([6, 7, 8, 9, 10])
print(a + b, a - b, a * b, a / b) # NumPy底层有for循环存在,可以对应元素进行运算
print(a ** b) # 乘方运算
print(np.sin(a)) # 正弦,表示弧度数
print(a.ndim) # 输出数组a有几个维度
print(a.shape) # 输出一个元组,表示每个维度有几个元素
print(a.size) # 输出元素总数
数组切片取值:
a = np.arange(25).reshape(5, 5) # 从0到24的5*5数组
print(a)
print(a[:, 1::2]) # 这个2代表从下标为1开始的列,隔一列取一列
print(a[4:, :]) # 取第四行开始到最后一行,列为所有
print(a[1::2, :-1:2]) # 第一行开始,隔一行取一行,一直到最后一行,列从头开始,隔一列取一列,-1代表最后一列不取
print(a[[0, 1, 2, 3, ], [1, 2, 3, 4]]) # 两个坐标对应取四个元素
print(np.where(a % 3 == 0, a, np.nan)) # 创建一个新数组,使数组a对应位置上所有能被3整除的都替换为nan(第一个参数是一个布尔值,True为第二个参数的值,False为第三个参数的值,其中nan代表一个缺省的值)
判断数组元素生成布尔数组:
a = np.array([3, -1, 4, 0, 6, -7, -3, 5])
nega = a < 0 # 将符合条件的下标存起来
print(nega) # 返回一个布尔型数组,存入的下标显示True
print(a[nega]) # 打印筛选出来的元素
print(np.nonzero(nega)) # 返回选中的下标和返回数组中元素的类型
print((a < 0).any()) # a<0返回的布尔数组中,只要有一个为True就返回True
print((a < 0).all()) # a<0返回的布尔数组中,全部为True才返回True
print((a > 3) & (a < 8))
a.sort() # 排序
print(a)
索引和切片:
a = np.array([1, 2, 3]) # 一维数组
p1 = a[1] # 索引
p2 = a[1:2]
print(p1)
print(p2)
print(a.flags.owndata) # 返回信息为:数组是否拥有它所使用的内存或从另一个对象中借用它
print(p1.flags.owndata) # 花式索引是一个副本,有独立内存
print(p2.flags.owndata) # 切片是一个视图,没有独立内存,更改这个切片会更改原数组
轴:
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(a.sum(axis=0)) # 根据轴加和,轴代表维度的下标,0就是第一个维度
print(a.sum(axis=1)) # 根据轴加和,轴代表维度的下标,1就是第二个维度
print(a.mean(axis=0).shape) # 返回在该轴上的元素个数
print(a.mean(axis=1).shape)
print(a.max(axis=1)) # 求该轴最大值
print(a.argmax(axis=1)) # 该轴最大数的下标