认识NumPy
创建一维数组
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'
array1 = np.array([1, 2, 3, 4, 5], dtype='u2')
array1
type(array1)
array([1, 2, 3, 4, 5])
array1.size
array1.ndim
array1.shape
数组每个元素占用的内存空间(字节)
array1.itemsize
array1.nbytes
array1.dtype
guido = plt.imread('resources/guido.jpg')
plt.imshow(guido)
type(guido)
guido.shape
array2 = np.array(['apple', 'pitaya', 'waxberry', 'litchi'])
array2
array2.dtype
array3 = np.arange(10)
array3
array4 = np.arange(1, 20, 3)
array4
array5 = np.arange(1, 20, 0.5)
array5
array6 = np.linspace(-5, 5, 51)
array6
x = np.linspace(-2 * np.pi, 2 * np.pi, 120)
y = np.round(np.sin(x), 4)
plt.plot(x, y, color='blue', marker='x')
plt.show()
方法四:通过随机函数创建一维数组
array7 = np.random.randint(1, 100, 5)
array7
array8 = np.random.random(10)
array8
heights = np.random.normal(169.7, 6.5, 500)
heights = np.round(heights, 1)
plt.hist(heights, bins=10)
plt.show()
array9 = np.arange(1, 10)
array9
print(array9[8])
print(array9[-1])
array9[[0, 0, 1, 0, 1, -1, -2, -2, -2]]
array9[array9 > 5]
array9[array9 % 2 == 0]
array9[(array9 > 5) & (array9 % 2 == 0)]
array9[(array9 > 5) | (array9 % 2 == 0)]
array9[(array9 > 5) | ~(array9 % 2 == 0)]
array9[::-1]
创建二维数组
array10 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
array10
array10.shape
array10.ndim
array11 = array9.reshape((3, 3))
array11
array10 == array11
array11 > 5
array11[array11 > 5]
np.random.randint(60, 101, (5, 3))
np.zeros((5, 5), dtype=np.int32)
np.ones((4, 3))
np.full((3, 5), 100)
np.eye(10)
array11[1][1] = 100
array11[1][1]
array11[1,1] = 5
array11[1,1]
array11[:2,:2]
guido = plt.imread('resources/guido.jpg')
plt.imshow(guido)
head = guido[30:350, 85:310]
plt.imshow(head)
plt.imshow(guido[::-1])
plt.imshow(guido[:, ::-1])
plt.imshow(guido[:, :, ::-1])
数组对象的方法
获取描述性统计信息
集中趋势:均值、中位数、众数
离散趋势:最大值、最小值、极差、四分位距离、方差、标准差
下四分位数(25%分位数),通常记为Q1
中位数(50%分位数),通常记为Q2
上四分位数(75%分位数),通常记为Q3
四分位距离:$ IQR = Q3 - Q1
异常值:$ data < Q1 - 1.5 \times IQR
异常值:$ data > Q3 + 1.5 \times IQR
array12 = np.random.randint(10, 100, 8)
array12
array12.mean()
np.sort(array12)
np.median(array12)
array13 = np.array([1, 1, 3, 5, 5, 5, 5, 5, 6, 6, 7, 8])
array13
print('Mean:', array13.mean())
print('Median:', np.median(array13))
temp_list = array13.tolist()
temp_list.append(100)
array14 = np.array(temp_list)
array14
print('Mean:', array14.mean())
print('Median:', np.median(array14))
print('Min:', array14.min())
print('Max:', array14.max())
print('Ptp:', np.ptp(array14))
print('Variance:', array14.var())
print('Standard deviation:', array14.std())
print('Q1:', np.quantile(array14, 0.25))
print('Q2:', np.quantile(array14, 0.5))
print('Q3:', np.quantile(array14, 0.75))
print('IQR:', np.quantile(array14, 0.75) - np.quantile(array14, 0.25))
array12
array12.argmax(), array12.argmin()
array12.cumsum()
array15 = np.array([True, False, True, True])
array15.all()
array15.any()
array16 = np.random.randint(60, 101, (5, 3))
array16.flatten()
array16.dump('array16.dat')
array17 = np.load('array16.dat', allow_pickle=True)
array17
array16 is array17
返回排序后的数组
np.sort(array12)
array12.sort()
array12
array17.swapaxes(0, 1)
array17.transpose()
array17.T
array18 = np.arange(1, 10)
array19 = np.array([1, 1, 1, 2, 2, 2, 3, 3, 3])
array18 ** array19
array20 = np.array([100])
array20
array18 + array20
使用广播机制的前提条件:
1. 两个数组的后缘维度相同。
2. 两个数组的后缘维度不同,但其中一方为1。
后缘维度:数组的shape属性,从后往前看的部分。
matrix1 = np.array([[1, 0, 2], [-1, 3, 1]])
matrix2 = np.array([[3, 1], [2, 1], [1, 0]])
matrix1 @ matrix2
np.matmul(matrix1, matrix2)
|