数据分析02 numpy创建数组
numpy 特性
多维性:支持0维(数字),1维(向量),2维(矩阵)以及更高维的数组
同质性:所有元素类型必须一致(通过dtype指定)
高效性:基于连续内存块存储,运算速度高于python原生列表

多维性
多维性:就是0维,还是1维,2维的形状等等
就是可以创建不同维度的形状
import numpy as np
# 0维数组
arr = np.array(5)
print(arr)
# 输出为 [5]
arr = np.array([1,2,3])
print(arr)
# 输出为 [1,2,3]
# 2维数组
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
# 输出为:
[[1 2 3]
[4 5 6]]
# 是一个2行3列的数据
同质性
就是里面的数据都是同一种类型的
如果是不同类型的话,会自动的进行转换
比如数字和字符串的存在,会将数字转换为字符串
arr = np.array([1,23,"asd"])
print(arr)
# 输出为 ['1' '23' 'asd']
arr = np.array([1,2,3,4.12])
print(arr)
# 输出为 [1. 2. 3. 4.12]
# 全部转换为浮点数了
numpy属性
都是对象里面的属性,因此的话,直接对象.属性就能调用

ndim属性
ndim属性,这个主要就是用来判断数组的维度的,是0维,1维,还是2维的
arr = np.array(5)
print(arr)
print("0维数组的维度:",arr.ndim)
# 输出为 0
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print("2维数组的维度:",arr.ndim)
# 输出为 2
shape属性
判断数组的形状的
arr = np.array(5)
print(arr)
print("0维数组的维度:",arr.ndim)
print("0维数组的形状为:",arr.shape)
# 输出为 ()
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print("2维数组的维度:",arr.ndim)
print("2维数组的形状为:",arr.shape)
# 输出为 (2,3)
# 2行3列
arr = np.array([1,2,3])
print(arr)
print("1维数组的维度:",arr.ndim)
print("1维数组的形状为:",arr.shape)
# 输出为:(3,)
# 返回1个数字表示里面是1维数组,里面表示一维数组的个数为3个
size属性
arr = np.array([[1,2,3],[4,5,6]])
print(arr)
print("2维数组的维度:",arr.ndim)
print("2维数组的形状为:",arr.shape)
print("2维数组的个数为:",arr.size)
# 输出为 6
arr = np.array([1,2,3])
print(arr)
print("1维数组的维度:",arr.ndim)
print("1维数组的形状为:",arr.shape)
print("1维数组的个数为:",arr.size)
# 输出为3
dtype属性
判断数组里面的类型
arr = np.array([1,2,3])
print(arr)
print("1维数组的维度:",arr.ndim)
print("1维数组的形状为:",arr.shape)
print("1维数组的个数为:",arr.size)
print("1维数组的类型为:",arr.dtype)
# 输出为 int64
numpy数组创建
基本上都是方法需要带上()


基本创建array
使用array()函数创建数组
list1 = [1,2,3]
arr = np.array(list1,dtype=np.float64)
print(arr)
# 输出为 [1. 2. 3.]
copy创建数组
复制一个已经存在的数组,2个数组之间没有任何关系
arr1 = np.copy(arr)
print(arr1)
# 输出为 [1. 2. 3.]
预定义形状创建
全1创建数组
就是创建一个里面的数据全部都是1的数组
ones(n) 一维数组 (3) 就是创建3个数据全1的1维数组
ones(n,m) 二维数组 n表示行,m表示列
里面是传入维度的,1个数字就是1维的,2个数字就是二维数组
arr = np.ones((5))
print(arr)
# 输出为 [1. 1. 1. 1. 1.]
arr = np.ones((2,3))
# 2行3列全是1的数据
print(arr)
# 输出为 [[1. 1. 1.]
# [1. 1. 1.]]
全0创建数组
arr = np.zeros((5))
print(arr)
arr = np.zeros((2,3))
print(arr)
# 输出结果为
[0. 0. 0. 0. 0.]
[[0. 0. 0.]
[0. 0. 0.]]
未初始化创建
就是还没有想好要创建什么样的数组,里面元素的数据是随机的
arr = np.empty((3))
print(arr)
arr = np.empty((2,3))
print(arr)
# 输出为
[7.74860419e-304 7.74860419e-304 7.74860419e-304]
[[0. 0. 0.]
[0. 0. 0.]]
固定值full
就是创建数组里面的元素是固定的
# full(数组,固定值)
arr = np.full(3,5)
print(arr)
arr = np.full((2,3),2025)
print(arr)
# 输出为
[5 5 5]
[[2025 2025 2025]
[2025 2025 2025]]
_like方法
模仿某个数组形状和数据类型,创建一个数组
arr = np.array([1,2,3,4])
arr1 = np.zeros_like(arr)
print(arr1)
# 输出为 [0 0 0 0]
arr1 = np.ones_like(arr)
print(arr1)
# 输出为 [1 1 1 1]
arr1 = np.empty_like(arr)
print(arr1)
arr1 = np.full_like(arr,2027)
print(arr1)
# 输出为 [2027 2027 2027 2027]
arange()
-
用来生成等差数组的,跟range()用法一致
-
不包含end
-
生成是一维数组
arr = np.arange(1,10,2)
print(arr)
# 输出为
[1 3 5 7 9]
linspace()
-
就是在start,end中取num个数,是一个等分的取值
-
linspace 用于均分区间生成数组,和 arange 逻辑不同,核心是指定区间 + 元素个数
-
包含end
arr = np.linspace(1,10,2,dtype=np.int64)
print(arr)
# 输出为
[ 1 10]
random(随机数组)
rand方法,均匀随机数
-
传入维度,直接生成对应的形状的数组
-
数值范围为 0<= 数值 < 1 浮点型
arr = np.random.rand(5)
print(arr)
# 输出为
[0.14840442 0.07395859 0.46010849 0.09559157 0.71792922]
# 传入的是2行3列的形状的二维数组
arr = np.random.rand(2,3)
print(arr)
# 输出为
[[0.15800859 0.89980517 0.25471082]
[0.70107421 0.5456336 0.90347171]]
randn() 标准的正态分布
均值0,方差1
# 2行3列正态分布随机数组
arr = np.random.randn(2,3)
print(arr)
# 输出为
[[-0.86084078 -0.23897869 0.65021327]
[ 0.34598417 0.52391193 1.25833254]]
randint() 生成随机整数
np.random.randint(low, high=None, size=None)
-
low:最小值
-
high:最大值(不包含)
-
size:数组形状
# 单个整数,1~9随机数
arr = np.random.randint(1,10)
print(arr)
# 一维数组,5个元素,范围[2,8)
arr = np.random.randint(2,8,size=5)
print(arr)
# 二维数组,2行3列,范围[2,8)
arr = np.random.randint(2,8,size=(2,3))
print(arr)
# 输出为
7
[2 5 5 3 5]
[[5 3 2]
[6 7 5]]
random () 同 rand,[0,1) 随机小数
- 跟上面的rand一样,生成的是[0,1) 随机小数
arr = np.random.random(4)
print(arr)
arr = np.random.random((2,3))
print(arr)
# 输出为
[0.09873536 0.88957709 0.03991909 0.45217375]
[[0.99703263 0.97631639 0.26825242]
[0.13266612 0.75760199 0.17823173]]
sedd随机数种子
# 设置固定的种子,这个数字素随意
np.random.seed(666)
# 种子只对它后面的随机代码生效,前面无效
# 后续随机数永久固定
arr = np.random.randint(1,20,size=5)
print(arr)
# 多次运行,输出永远相同
[13 3 14 7 10]

单位矩阵/对角矩阵
eye() 单位矩阵
- 对角线为1,其余为0
np.eye(N, M=None, k=0, dtype=float)
-
N:行数,必须要要传入的
-
M:列数,默认M=N,可以自定义传入
-
K:对角线偏移量:默认K=0,主对角线
# 4行4列的二维数组
arr = np.eye(4)
print(arr)
# 输出为
[[1. 0. 0. 0.]
[0. 1. 0. 0.]
[0. 0. 1. 0.]
[0. 0. 0. 1.]]
# 非方阵,行数不等于列数
arr = np.eye(5,6)
print(arr)
# 输出为
[[1. 0. 0. 0. 0. 0.]
[0. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0.]
[0. 0. 0. 1. 0. 0.]
[0. 0. 0. 0. 1. 0.]]
diag() 对角矩阵
分为2种
-
传入1维数组,生成对角矩阵,一维元素作为对角线,其余为0
-
传入2维数组,提取对角线元素(返回一维数组)
# 传入的是1维数组
arr = np.diag([2,3,4])
print(arr)
# 输出为
[[2 0 0]
[0 3 0]
[0 0 4]]
# 传入的是2维数组
arr = np.diag([[1,2],[2,3]])
print(arr)
# [[1,2]
[2,3]]
# 输出为,取出对角线(1,3)
[1 3]
矩阵概念
行和列


浙公网安备 33010602011771号