joeの小窝

Loading...

数据分析02 numpy创建数组

numpy 特性

多维性:支持0维(数字),1维(向量),2维(矩阵)以及更高维的数组

同质性:所有元素类型必须一致(通过dtype指定)

高效性:基于连续内存块存储,运算速度高于python原生列表

img

多维性

多维性:就是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属性

都是对象里面的属性,因此的话,直接对象.属性就能调用

img

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数组创建

基本上都是方法需要带上()

img

img

基本创建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]

img

单位矩阵/对角矩阵

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]

矩阵概念

行和列

img

posted @ 2026-06-01 17:26  乔的港口  阅读(13)  评论(0)    收藏  举报