学习NumPy库,把一些重要的或者难的用法记录下来,方便复习。
- 从数值范围创建数组
numpy.arange(start, stop, step, dtype)#参数分别为起始值,终止值,步长和数据类型
- 创建等间隔一维数组
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)#参数分别为起始值,终止值,数据数,是否包含stop值,是否显示间距和数据类型
在这里插入代码片
- 使用数字 0 将一个全为 1 的 5x5 二维数组包围
Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
- 创建一个 5x5 的二维数组,并设置值 1, 2, 3, 4 落在其对角线下方
Z = np.diag(1+np.arange(4),k=-1)
- 创建一个 10x10 的二维数组,并使得 1 和 0 沿对角线间隔放置
Z = np.zeros((10,10),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
- 创建一个 0-10 的一维数组,并将 (1, 9] 之间的数全部反转成负数
Z = np.arange(11)
Z[(1 < Z) & (Z <= 9)] *= -1
- 找出两个一维数组中相同的元素
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print("Z1:", Z1)
print("Z2:", Z2)
np.intersect1d(Z1,Z2)
- 统计数组各行的算术平均值
np.mean(a, axis=1)
- 统计数组各列的加权平均值
np.average(a, axis=0)
10.统计中位数,方差,标准差等。
11.沿横 / 纵轴分割数组
np.hsplit(a, 3)
np.vsplit(a, 3)
12.返回每列最大值
np.max(a, axis=0) #行最大值axis = 1
- 返回每列最大值索引
np.argmax(a, axis=0) #最小值是argmin函数
14.找出两个一维数组中相同的元素
np.intersect1d(Z1,Z2)
15.使用 NumPy 打印昨天、今天、明天的日期
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today = np.datetime64('today', 'D')
tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print("yesterday: ", yesterday)
print("today: ", today)
print("tomorrow: ", tomorrow)
16.数组排序
Z.sort()#升序排序
Z.sort(axis=0)#列升序
17.将 float32 转换为整型
Z = np.arange(10, dtype=np.float32)
Z = Z.astype(np.int32, copy=False)
18.将随机二维数组按照第 3 列从上到下进行升序排列
Z = np.random.randint(0,10,(5,5))#生成一个5行5列数值在0~10之间的数组
Z[Z[:,2].argsort()]
19.交换前两行可以直接这样吗?
A[[0,1]] = A[[1,0]]
20.找出随机一维数组Z中出现频率最高的值
np.bincount(Z).argmax()
21.统计随机数组中的各元素的数量
Z = np.random.randint(0,100,25).reshape(5,5)
np.unique(Z, return_counts=True) # 返回值中,第 2 个数组对应第 1 个数组元素的数量
22.将多个 1 维数组拼合为单个 Ndarray
Z = np.array([Z1, Z2, Z3])
np.concatenate(Z)
23.使用 NumPy 计算变量直接的相关性系数
Z = np.array([
[1, 2, 1, 9, 10, 3, 2, 6, 7], # 特征 A
[2, 1, 8, 3, 7, 5, 10, 7, 2], # 特征 B
[2, 1, 1, 8, 9, 4, 3, 5, 7]]) # 特征 C
np.corrcoef(Z)
24.使用 NumPy 计算矩阵的特征值和特征向量
M = np.matrix([[1,2,3], [4,5,6], [7,8,9]])
w, v = np.linalg.eig(M)
# w 对应特征值,v 对应特征向量
25.打印九九乘法表
np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9))
26.使用 Numpy 将实验楼 LOGO 转换为 Ndarray 数组
from io import BytesIO
from PIL import Image
import PIL, requests
# 通过链接下载图像
URL = 'https://static.shiyanlou.com/img/logo-black.png'
response = requests.get(URL)
# 将内容读取为图像
I = Image.open(BytesIO(response.content))
# 将图像转换为 Ndarray
shiyanlou = np.asarray(I)
shiyanlou
# 将转换后的 Ndarray 重新绘制成图像
from matplotlib import pyplot as plt
%matplotlib inline
plt.imshow(shiyanlou)
plt.show()
27.几个常用的函数
flat #返回
np.nonzero([1,0,2,0,1,0,4,0])#返回一维数组中非 0 元素的位置索引
np.dot(A, B)#矩阵相乘
np.power(x,4)#对x数组的每个值4次方
np.set_printoptions(precision=2)#对于二维随机数组中各元素,保留其 2 位小数
Z/1e3#科学记数法输出 NumPy(Z) 数组
a.argsort()#打印各元素在数组中升序排列的索引
a.real #属性,数组a的实部
a.imag #属性,数组a的虚部
numpy.linalg.inv()# 函数计算矩阵的乘法逆矩阵。
numpy.linalg.solve() #函数给出了矩阵形式的线性方程的解。
umpy.matlib.eye() #函数返回一个矩阵,对角线元素为 1,其他位置为零。
np.c_[M1, M2]#按列连接两个数组
np.r_[M1, M2]#按行连接两个数组