100天的第4天数据科学训练营从NOOB到专家。
github链接:Complete-Data-Science-Bootcamp
主要帖子:Complete-Data-Science-Bootcamp
回顾第3天
昨天我们已经详细研究了有关python的OOP。
开始吧
numpy是Python中的一个库,可在数组上提供快速有效的数值操作。它被广泛用于数据科学和机器学习,以在大型数据集上执行数学操作。
python列表vs numpy阵列
numpy阵列类似于python列表,但是它们更有效,可以更快地执行操作。 Numpy阵列是同质的,这意味着它们只能包含相同数据类型的元素,而Python列表可以包含不同数据类型的元素。 Numpy阵列也具有固定的大小,而Python列表则没有。
创建一个numpy阵列
有几种创建一个numpy数组的方法:
- 基本ndarray:要创建一个基本的numpy数组,我们可以使用numpy.Array函数。例如:
import numpy as np
a = np.array([1, 2, 3, 4])
print(a)
[1 2 3 4]
- 零的数组:为了创建一个零数组,我们可以使用numpy瑞士函数。例如:
a = np.zeros(5)
print(a)
[0。 0. 0. 0. 0。]
- 一系列:要创建一个数组,我们可以使用numpy.ones函数。例如:
a = np.ones(5)
print(a)
[1。 1. 1. 1. 1。]
- ndarray中的随机数:要创建一个随机数数组,我们可以使用numpy.random.rand函数。例如:
a = np.random.rand(5)
print(a)
[0.34150314 0.25977794 0.18726775 0.00209527 0.08221211]
- 您选择的数组:要创建具有特定值的数组,我们可以使用numpy.arange函数。例如:
a = np.arange(1, 11)
print(a)
[1 2 3 4 5 6 7 8 9 10]
- numpy中的矩阵:要创建一个2D数组(矩阵),我们可以使用numpy.matrix函数。例如:
a = np.matrix([[1, 2, 3], [4, 5, 6]])
print(a)
[[1 2 3] [4 5 6]
- 均匀间隔的ndarray:要创建一个具有均匀间隔值的数组,我们可以使用numpy.linspace函数。例如:
a = np.linspace(1, 10, 5)
print(a)
[1. 3.25 5.5 7.75 10.]
numpy阵列的形状和重塑
- numpy数组的尺寸:要获取numpy数组的尺寸,我们可以使用ndarray.ndim属性。例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.ndim)
2
- numpy数组的形状:要获得numpy数组的形状,我们可以使用ndarray.shape属性。例如:
print(a.shape)
(2,3)
- numpy数组的大小:要获取numpy数组中的元素总数,我们可以使用ndarray.size属性。例如:
print(a.size)
6
- 重塑一个numpy数组:为了重塑一个numpy数组,我们可以使用ndarray.reshape函数。例如:
a = np.array([1, 2, 3, 4, 5, 6])
b = a.reshape(2, 3)
print(b)
[[1 2 3] [4 5 6]
- 扁平的数组:要使一个numpy阵列变平,我们可以使用ndarray.flatten函数。例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.flatten()
print(b)
[1 2 3 4 5 6]
- numpy数组的转置:要获取numpy阵列的转置,我们可以使用ndarray.transpose函数。例如:
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.transpose()
print(b)
[[1 4] [2 5] [3 6]
扩展和挤压一个数组
- 为了展开numpy数组,我们可以使用numpy.expand_dims函数。例如:
a = np.array([1, 2, 3])
b = np.expand_dims(a, axis=1)
print(b)
[[1] [2] [3]]
- 要挤压一个numpy阵列,我们可以使用numpy.squeeze函数。例如:
a = np.array([[1], [2], [3]])
b = np.squeeze(a)
print(b)
[1 2 3]
Numpy阵列的索引和切片
- 切片1-D Numpy数组:要切片一个1-D Numpy数组,我们可以使用
ndarray[start:end:step]
符号。例如:
a = np.array([1, 2, 3, 4, 5, 6])
b = a[1:4]
print(b)
[2 3 4]
- 切片2-d numpy数组:要切片一个2-D numpy阵列,我们可以使用
ndarray[row_start:row_end:row_step, col_start:col_end:col_step]
表示法。例如:
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = a[0:2, 1:3]
print(b)
[[2 3] [5 6]
- 切片3-D Numpy数组:要切片一个3-D Numpy阵列,我们可以使用
ndarray[dim1_start:dim1_end:dim1_step, dim2_start:dim2_end:dim2_step, dim3_start:dim3_end:dim3_step]
符号。例如:
a = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
b = a[0:2, 0:2, 0:2]
print(b)
[[[1 2] [4 5]]
[[7 8] [10 11]]
- numpy阵列的负面切片:要切片带有负索引的numpy阵列,我们可以使用
ndarray[-end:-start:-step]
符号。例如:
a = np.array([1, 2, 3, 4, 5, 6])
b = a[-4:-1]
print(b)
[3 4 5]
堆叠和串联numpy阵列
- 堆叠ndarrays:要垂直或水平堆叠numpy数组,我们可以使用
numpy.vstack
或numpy.hstack
函数。例如:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.vstack((a, b))
d = np.hstack((a, b))
print(c)
print(d)
[[1 2 3] [4 5 6]] [1 2 3 4 5 6]
- 串联ndarrays:为了沿特定轴连接numpy阵列,我们可以使用
numpy.concatenate
函数。例如:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
c = np.concatenate((a, b), axis=1)
print(c)
[[1 2 5 6] [3 4 7 8]]
在Numpy阵列中广播
广播是Numpy中的一个强大功能,它使我们能够在不同形状的阵列上执行算术操作。 Numpy自动广播较小的数组以匹配较大数组的形状以执行操作。
例如:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = a + b
print(c)
[5 7 9]
numpy ufuncs
numpy提供了广泛的通用函数(UFUNCS),可以应用于阵列以执行数学操作。一些常见的ufuncs包括:
-
np.add:添加两个数组元素
-
np.subtract:减去两个阵列元素
-
np.multiply:乘以两个阵列元素
-
np.divide:除以两个数组元素
-
np.abs:计算数组的绝对值
-
np.sin:计算数组的正弦
-
np.cos:计算数组的余弦
-
np.exp:计算数组的指数
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.add(a, b)
d = np.subtract(a, b)
e = np.multiply(a, b)
f = np.divide(a, b)
g = np.abs(a)
h = np.sin(a)
i = np.cos(a)
j = np.exp(a)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)
print(i)
print(j)
[5 7 9] [-3 -3 -3] [4 10 18] [0.25 0.4 0.4 0.4 0.5] [1 2 3] [0.84147098 0.90929743 0.14112001] [0.54030231 -0.41614684 -0.989999925] [2.799925] [2.799925] [2.799925] [2.7899925] [2.789925] [2.7182] [2.7182] p>
带有numpy阵列的数学
numpy提供了许多功能,可以在数组上执行数学操作。一些常见功能包括:
-
np.mean:计算数组的平均值
-
np.median:计算数组的中位数
-
np.std:计算数组的标准偏差
-
np.min:计算数组的最小值
-
np.max:计算数组的最大值
-
np.argmin:计算数组的最小值的索引
-
np.argmax:计算数组的最大值的索引
-
np.sort:按升序排列数个数组
a = np.array([1, 2, 3, 4, 5])
mean = np.mean(a)
median = np.median(a)
std = np.std(a)
min_val = np.min(a)
max_val = np.max(a)
min_index = np.argmin(a)
max_index = np.argmax(a)
sorted_a = np.sort(a)
print(mean)
print(median)
print(std)
print(min_val)
print(max_val)
print(min_index)
print(max_index)
print(sorted_a)
3.0 3.0 1.4142135623730951 1 5 0 4 [1 2 3 4 5]
numpy阵列和图像
numpy阵列可用于表示图像。要将图像读取到numpy数组中,我们可以使用scipy.misc.imread函数。要将numpy数组作为图像写,我们可以使用scipy.misc.imsave函数。
import numpy as np
import imageio
# Read image into NumPy array
img = imageio.imread('image.jpeg')
# Perform some operations on the image
img = img * 2
# Save the modified image
imageio.imsave('modified_image.jpeg', img)
要使用matplotlib显示图像,您可以使用与以前相同的代码:
import numpy as np
import matplotlib.pyplot as plt
# Read image into NumPy array
img = imageio.imread('image.jpeg')
# Display image
plt.imshow(img)
plt.show()
图像之后
# Read image into NumPy array
img = imageio.imread('modified_image.jpeg')
# Display image
plt.imshow(img)
plt.show()