Numpy数组

Numpy数组

Numpy数组

Numpy是Python中一个重要的科学计算库,它提供了一个强大的N维数组对象。在数据分析、计算机视觉、机器学习等领域中,Numpy都扮演着重要的角色。本文将详细介绍Numpy数组的相关知识,让读者对这个重要的数据结构有更深入的理解。

创建Numpy数组

首先,我们来看一下如何创建Numpy数组。可以使用numpy.array()函数来创建一个数组,该函数接受一个Python列表或元组作为输入,然后返回一个Numpy数组。下面是示例代码:

import numpy as np

# 创建一个一维数组
arr1 = np.array([1, 2, 3, 4, 5])
print(arr1)

# 创建一个二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)

运行上面的代码,会得到以下输出:

[1 2 3 4 5]
[[1 2 3]
 [4 5 6]
 [7 8 9]]

Numpy数组的属性

Numpy数组有一些重要的属性,可以帮助我们更好地理解和操作数组。下面是一些常用的数组属性:

  • ndim:数组的维度
  • shape:数组的形状,即每个维度的大小
  • size:数组的总元素个数
  • dtype:数组的数据类型

接下来我们看看如何获取和操作这些属性:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

print("数组的维度:", arr.ndim)
print("数组的形状:", arr.shape)
print("数组的元素个数:", arr.size)
print("数组的数据类型:", arr.dtype)

运行上面的代码,会输出如下结果:

数组的维度: 2
数组的形状: (2, 3)
数组的元素个数: 6
数组的数据类型: int64

访问Numpy数组元素

可以通过索引访问Numpy数组中的元素,和Python中的列表类似。但是需要注意的是,Numpy数组的索引是从0开始的。示例代码如下:

import numpy as np

arr = np.array([1, 2, 3, 4, 5])

print(arr[0])   # 访问第一个元素
print(arr[2])   # 访问第三个元素
print(arr[-1])  # 访问最后一个元素

运行上面的代码,输出如下:

1
3
5

对于多维数组,可以通过逗号分隔的索引访问元素。例如:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(arr[0, 0])   # 访问第一个元素
print(arr[1, 1])   # 访问第二行、第二列的元素
print(arr[2, -1])  # 访问最后一行、最后一列的元素

输出为:

1
5
9

切片操作

和Python列表类似,Numpy数组支持切片操作。可以通过:进行切片,格式为start:stop:step。示例代码如下:

import numpy as np

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

print(arr[2:5])   # 获取索引2到4的元素
print(arr[:5])    # 获取前5个元素
print(arr[5:])    # 获取索引5及之后的元素
print(arr[::2])   # 每隔一个元素取一个值

运行上面的代码,会输出如下结果:

[3 4 5]
[1 2 3 4 5]
[ 6  7  8  9 10]
[1 3 5 7 9]

对于多维数组,可以分别对不同维度进行切片操作。示例代码如下:

import numpy as np

arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

print(arr[:2, 1:3])   # 获取第1和第2行,第2和第3列的元素
print(arr[1:, :2])    # 获取索引为1及之后的行,索引为2之前的列

运行上面的代码,会得到如下输出:

[[2 3]
 [6 7]]
[[ 5  6]
 [ 9 10]]

改变数组形状

有时候我们需要改变数组的形状,可以使用reshape()方法来实现。需要注意的是,改变形状后数组的元素个数不能发生改变。示例代码如下:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

new_arr = arr.reshape(3, 2)

print(new_arr)

输出为:

[[1 2]
 [3 4]
 [5 6]]

数组拼接

Numpy数组支持水平和垂直拼接操作,可以使用vstack()hstack()方法来实现。示例代码如下:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])

# 垂直拼接
v_arr = np.vstack((arr1, arr2))
print(v_arr)

# 水平拼接
h_arr = np.hstack((arr1, arr2))
print(h_arr)

运行上面的代码,会输出如下结果:

[[1 2]
 [3 4]
 [5 6]
 [7 8]]

[[1 2 5 6]
 [3 4 7 8]]

数组运算

Numpy数组支持各种数学运算,包括加法、减法、乘法、除法等。当操作两个数组时,它们的形状必须相同。示例代码如下:

import numpy as np

arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])

# 加法
add_arr = arr1 + arr2
print(add_arr)

# 乘法
mul_arr = arr1 * arr2
print(mul_arr)

# 矩阵点乘
dot_arr = np.dot(arr1, arr2)
print(dot_arr)

输出为:

[[ 6  8]
 [10 12]]

[[ 5 12]
 [21 32]]

[[19 22]
 [43 50]]

常用函数

Numpy提供了很多常用的数学函数,如sum()mean()std()等。这些函数能够对数组进行快速计算,非常方便实用。示例代码如下:

import numpy as np

arr = np.array([[1, 2, 3], [4, 5, 6]])

# 求和
print(np.sum(arr))

# 求平均值
print(np.mean(arr))

# 求标准差
print(np.std(arr))

运行上面的代码,会输出如下结果:

21
3.5
1.707825127659933

随机数生成

Numpy还提供了随机数生成的功能,可以使用random模块来生成随机数组。下面是一些示例代码:

import numpy as np

# 随机生成[0, 1)之间的随机数
rand_arr = np.random.rand(2, 3)
print(rand_arr)

# 随机生成整数数组
rand_int_arr = np.random.randint(1, 10, (2, 3))
print(rand_int_arr)

运行上面的代码,会得到类似以下输出:

[[0.5720815  0.62737447 0.11427587]
 [0.23510998 0.67989194 0.09514067]]

[[4 7 3]
 [3 9 8]]

总结

通过本文的介绍,读者对Numpy数组应该有了更深入的理解。Numpy数组是Python科学计算中的核心数据结构,掌握好Numpy数组的基本操作对于数据分析、计算机视觉和机器学习等领域的工作至关重要。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程