Python使用 - NumPy用法1

NumPy的核心数据结构之一是ndarray,表示一个多维数组,他存储的是单一数据类型。

 

导入包

import numpy as np

 

1维数组

list1 = [1, 2, 3, 4, 5, 6]
ndarr1 = np.array(list1, dtype=np.float32)
print(type(ndarr1), ndarr1) # <class 'numpy.ndarray'> [1. 2. 3. 4. 5. 6.]
print(ndarr1.itemsize) # 4, 元素的字节数
print(ndarr1.dtype) # float32, 元素类型
print(ndarr1.size) # 6, 元素个数
print(ndarr1.ndim) # 1, 几维数组
print(ndarr1.shape) # (6,)

 

2维数组

ndarr1 = np.array([[1, 2, 3], [11, 12, 13]]) # 2行3列2维数组
print(ndarr1.dtype) # int32
print(ndarr1.ndim) # 2, 几维数组
print(ndarr1.shape) # (2, 3)
print(ndarr1[1,1:3]) # [12 13], 第2行的第2和第3列

ndarr2 = ndarr1>2 # 元素变成bool类型(是否>2)
print(ndarr2.dtype) # bool
print(ndarr1[ndarr2]) # [ 3 11 12 13]

 

empty, arange, once, zero

from collections.abc import Iterable, Iterator

a = np.empty((3, 2)) # 3行2列数组, 值随机
print(type(a)) # <class 'numpy.ndarray'>
print(a)

a = np.eye(3) # 3行3列的单位矩阵
print(type(a), a) # <class 'numpy.ndarray'>
print(a)

a = np.arange(1, 10, 2) # 1维数组, 参数为start, end, step
print(type(a)) # <class 'numpy.ndarray'>
print(isinstance(a, Iterable), isinstance(a, Iterator)) # True False
print(a) # [1 3 5 7 9]

a = np.ones(3) # 1行3列数组1维数组, 值均为1
print(type(a)) # <class 'numpy.ndarray'>
print(a)

a = np.ones((3, 2)) # 3行2列2维数组, 值均为1
print(type(a)) # <class 'numpy.ndarray'>
print(a)

a = np.ones((2, 3, 2)) # 3维数组, 第1维2, 第2维3, 第3维2, 值均为1
print(type(a)) # <class 'numpy.ndarray'>
print(a)

# np.zeros用法同np.ones类似, 只是值均为0

 

linspace等差数列

logspace等比数列

a = np.linspace(0, 10, 5) # 开始为0, 结束为10, 有5个元素的等差数列
print(a) # [ 0. 2.5 5. 7.5 10. ]

a = np.linspace(0, 10, 5, endpoint=False) # 开始为0, 结束为10, 有5个元素的等差数列
print(a) # [0. 2. 4. 6. 8.]

a = np.logspace(0, 2, 3) # 开始为10^0, 结束为10^2, 有3个元素的等比数列
print(a) # [ 1. 10. 100.]

a = np.logspace(0, 2, 3, base=2) # 开始为2^0, 结束为2^2, 有3个元素的等比数列
print(a) # [1. 2. 4.]

 

平均值

average可以计算算数平均值,也可以计算加权平均值

a = np.array([1, 2, 3, 4])
print(np.average(a)) # 2.5, 平均值

w = np.array([1, 2, 1, 1])
print(np.average(a, weights=w)) # 2.4, 加权平均值(1*1+2*2+3*1+4*1)/(1+2+1+1)=12/5

a = np.array([[1, 2, 3], [11, 12, 13]]) # 2行3列数组
print(np.average(a, axis=0)) # [6. 7. 8.], 行的平均值 (列作为第1层遍历,再遍历所有行)
print(np.average(a, axis=1)) # [ 2. 12.], 列的平均值

mean只能计算算数平均值

list1 = [1, 3, 5] # 算数平均值
a = np.mean(list1)
print(a) # 3.0

list1 = [1, 3, 5, 7] # 算数平均值
a = np.mean(list1)
print(a) # 4.0

 

中值

list1 = [1, 3, 6] # 元素为奇数个, 中间的那个元素
a = np.median(list1)
print(a) # 3.0

list1 = [1, 3, 6, 7] # 元素为偶数个, 中间的2个元素的平均值, 即: (3+6)/2
a = np.median(list1)
print(a) # 4.5

 

 随机

a = np.random.randn(1, 3) # [0, 1)正态分布随机数, 1行3列2维数组
print(a) # [[0.08922697 0.335483 0.43368239]]

a = np.random.uniform(1, 3, (2, 3)) # [1, 3)均匀分布随机数(浮点数), 2行3列2维数组
print(a)

a = np.random.randint(1, 3, (2, 3)) # [1, 3)均匀分布随机数(整数), 2行3列2维数组
print(a)

rand, random内部都是调用的random_sample

a = np.random.rand(1, 3) # [0, 1)均匀分布随机数, 1行3列2维数组
print(a) # [[0.96676531 0.16221181 0.59009269]]

a = np.random.random((1, 3)) # [0, 1)均匀分布随机数, 1行3列2维数组
print(a) # [[0.09063854 0.99784202 0.42242609]]

a = np.random.random_sample((1, 3)) # [0, 1)均匀分布随机数, 1行3列2维数组
print(a) # [[0.49189229 0.23482355 0.86513068]]

 

参考

numpy库:常用基本 - smallpi - 博客园 (cnblogs.com)

Python之Numpy详细教程_python numpy_cs_程序猿的博客-CSDN博客

Python之Numpy基础 - 知乎 (zhihu.com)

Python Numpy库教程(超详细)_代码输入中...的博客-CSDN博客

 

posted @ 2023-09-12 23:03  yanghui01  阅读(9)  评论(0编辑  收藏  举报