NumPy数组的基础知识

  • Post category:Python

下面是详细的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数组对于进行科学计算是非常必要的。