下面是详细的NumPy数组基础知识攻略。
NumPy数组基础知识
NumPy是Python中最重要的科学计算库之一,它提供了ndarray这个类来支持多维数组,也是NumPy最核心的数据结构。在使用NumPy进行科学计算时,我们通常会用NumPy数组来存储和处理数据。
ndarray
ndarray是NumPy中最重要的类之一,它可以有效地提高Python中多维数组的计算效率,并且可以灵活地进行数据的存储和处理。
创建ndarray
使用NumPy创建ndarray可以使用numpy.array()
函数或者利用NumPy提供的方法来创建。具体有以下几种方法:
- 使用numpy.array()函数创建:
“`python
import numpy as np
a = np.array([1, 2, 3]) # 一维数组
b = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
c = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]]) # 三维数组
print(a)
print(b)
print(c)
“`
- 使用numpy.zeros()函数创建全0数组:
“`python
import numpy as np
a = np.zeros(5) # 一维数组
b = np.zeros((2, 3)) # 二维数组
print(a)
print(b)
“`
- 使用numpy.ones()函数创建全1数组:
“`python
import numpy as np
a = np.ones(5) # 一维数组
b = np.ones((2, 3)) # 二维数组
print(a)
print(b)
“`
- 使用numpy.arange()函数创建按指定间隔的一维数组:
“`python
import numpy as np
a = np.arange(10) # 从0开始,步长为1
b = np.arange(0, 10, 2) # 从0开始,步长为2
print(a)
print(b)
“`
ndim、shape和dtype
在使用ndarray进行数据处理时,经常需要查看数组的维度、形状和类型。ndim、shape和dtype属性分别可以查看数组的维度、形状和类型。
import numpy as np
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(a.ndim) # 三维数组
print(a.shape) # 形状为(2, 2, 2)
print(a.dtype) # 类型为int32
索引和切片
NumPy的数组索引和切片与Python列表的索引和切片类似。对于多维数组,可以用逗号分隔索引值。例如:
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 获取数组的第一行,第二列和第三列
print(a[0, 1:]) # [2 3]
# 获取数组的第一行和第二行
print(a[:2]) # [[1 2 3]
# [4 5 6]]
# 获取数组中最后一列的所有元素
print(a[:, -1]) # [3 6 9]
数组操作
数组形状的修改
修改数组的形状可以使用reshape()
函数。它返回一个新的数组,而不改变原数组本身。
import numpy as np
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a.reshape((2, 3))) # [[1 2 3]
# [4 5 6]]
数组横向拼接
使用concatenate()
函数可以实现数组的横向拼接,即水平叠加数组。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9]])
# 横向拼接a和b
c = np.concatenate((a, b), axis=0)
print(c) # [[1 2 3]
# [4 5 6]
# [7 8 9]]
数组纵向拼接
使用vstack()
函数可以实现数组的纵向拼接,即垂直叠加数组。
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
# 纵向拼接a和b
c = np.vstack((a, b))
print(c) # [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
示例
示例1:求解多元一次方程组
多元一次方程组可以用矩阵表示,因此可以使用NumPy来求解多元一次方程组。比如有以下方程组:
$$
2x_1+3x_2=5 \
4x_1+5x_2=6
$$
可以用NumPy数组表示为:
import numpy as np
A = np.array([[2, 3], [4, 5]])
b = np.array([[5], [6]])
x = np.linalg.solve(A, b)
print(x) # [[-7.]
# [ 7.]]
示例2:图片缩放
使用NumPy可以对图片进行缩放操作。以下是对图片进行缩小操作的示例:
from PIL import Image
import numpy as np
# 打开图片并转换为NumPy数组
image = Image.open('原图.jpg')
image_array = np.array(image)
# 对图片进行缩小操作
image_array_small = image_array[::2, ::2] # 缩小2倍
# 将NumPy数组转换回图片并保存
image_small = Image.fromarray(np.uint8(image_array_small))
image_small.save('缩小后的图片.jpg')
总结
至此,NumPy数组基础知识就讲解完了。NumPy数组是NumPy计算库中最为重要的数据结构,熟练使用NumPy数组对于进行科学计算是非常必要的。