个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞收藏评论+关注哦!
本文是Python面试专栏的第四篇。在本专栏中,我将总结华为、阿里巴巴、字节跳动等互联网公司 Python 面试中最常见的 100+ 问题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及 Python 基础知识、Python 编程、数据分析以及 Python 函数库等多个方面。
NumPy 是 Python 的一个开源科学计算库,用于处理大型多维数组和矩阵。它是许多其他科学计算库的基础,如 pandas、SciPy 等。NumPy 提供了高性能的数组对象(array),以及对数组进行操作的各种函数。
NumPy 数组相对于 Python 列表具有以下几个优势:
性能效率高:NumPy 数组是使用 C 语言编写的,因此在处理大规模数据时具有更高的性能效率。它们支持向量化操作,可以一次性对整个数组执行相同的操作,而无需遍历每个元素。这种优化使得 NumPy 数组在数值计算和科学计算领域中非常受欢迎。
内存占用少:NumPy 数组使用连续的内存块来存储数据,相对于 Python 列表中的对象引用,它们不需要额外的内存来存储指针。这也使得 NumPy 数组在处理大型数据集时更加高效,并且减少了内存消耗。
广泛的数学函数和运算符支持:NumPy 提供了许多内置的数学函数和运算符,使得对数组进行各种数学和统计运算更加方便。例如,对数组应用三角函数、指数函数、平均值、标准差等操作非常简单。
广泛的索引和切片功能:NumPy 数组支持直接通过索引和切片操作来访问和修改数组中的元素,提供了更灵活和高效的数据访问方式。此外,NumPy 还提供了强大的布尔索引功能,可以根据条件对数组进行筛选和过滤。
向量化操作:NumPy 数组支持向量化操作,允许对整个数组或数组的子集执行相同的操作,而无需使用显式循环。这种向量化操作能够提高代码的简洁性、可读性和运行效率。
可以使用多种方式来创建 NumPy 数组,包括从列表、元组、NumPy 函数、外部文件等。下面是几个常用的创建 NumPy 数组的方法:
从列表或元组创建:arr = np.array([1, 2, 3])
使用 NumPy 函数创建:arr = np.zeros((3, 3))
从外部文件读取:arr = np.load('data.npy')
在 NumPy 中,可以使用 np.loadtxt()
函数或 np.genfromtxt()
函数来从文本文件加载数据。这两个函数支持从各种常见的文本文件格式中加载数据,包括CSV、TSV等。
np.loadtxt()
函数:这个函数可以从文本文件中加载数据,并将其存储为 NumPy 数组。示例代码:
import numpy as np
data = np.loadtxt('data.txt', delimiter=',')
print(data)
np.genfromtxt()
函数:这个函数也可以从文本文件中加载数据,并将其存储为 NumPy 数组。它与 np.loadtxt()
类似,但功能更强大,可以处理缺失值和数据类型等问题。示例代码:
import numpy as np
data = np.genfromtxt('data.txt', delimiter=',', missing_values='N/A', filling_values=0)
print(data)
另外,NumPy 还提供了 np.fromfile()
函数可以从二进制文件中加载数据。
要获取 NumPy 数组的维度,可以使用 ndim
属性。例如,对于一个二维数组 arr
,可以使用 arr.ndim
来获取其维度。
要获取 NumPy 数组的形状,可以使用 shape
属性。例如,对于一个二维数组 arr
,可以使用 arr.shape
来获取其形状。
NumPy 数组有许多常用的操作,可以对数组进行各种操作和变换。以下是一些常见的 NumPy 数组操作:
创建数组:可以使用 NumPy 提供的函数来创建数组,例如 np.array()
、np.zeros()
、np.ones()
、np.arange()
等。
访问元素:可以使用索引和切片操作来访问数组中的元素。例如,使用 array[index]
来获取特定位置的元素,使用 array[start:end:step]
来进行切片操作。
修改形状:可以使用 reshape()
函数改变数组的形状,或者使用 resize()
函数重新调整数组的大小。还可以使用 flatten()
函数将多维数组转换为一维数组。
数组运算:NumPy 支持对数组进行各种数学运算。可以进行基本的数学运算(如加法、减法、乘法、除法、幂运算等),以及逐元素的数学函数(如sin、cos、exp等)。
统计函数:NumPy 提供了各种统计函数,例如 sum()
、mean()
、median()
、var()
、max()
、min()
、std()
等,可以对数组进行汇总统计。
排序和筛选:可以使用 sort()
函数对数组进行排序。还可以使用条件表达式来筛选数组中的元素。
数组拼接和分割:可以使用 concatenate()
、vstack()
、hstack()
等函数将多个数组拼接在一起,或者使用 split()
、vsplit()
、hsplit()
等函数将一个数组分割成多个子数组。
数组转置和重塑:可以使用 transpose()
函数或 .T
属性来对数组进行转置操作。此外,还可以使用 rollaxis()
、swapaxes()
等函数来改变数组的轴的顺序。
矩阵运算:在 NumPy 中,可以对数组进行矩阵操作,如 np.dot()
函数或 @
运算符执行矩阵乘法、使用 np.linalg.inv()
、np.linalg.det()
、np.linalg.eig()
、np.trace()
函数计算方阵的逆矩阵、行列式、特征值和特征向量、迹等。
在 NumPy 中,可以使用不同的函数和方法对数组进行排序操作。以下是一些常见的 NumPy 数组排序操作:
按行或列排序:可以使用 np.sort()
函数对数组的每一行或每一列进行排序。默认情况下,该函数将返回一个新的排序后的数组。示例代码:
import numpy as np
# 按行排序
arr = np.array([[3, 2, 1], [6, 5, 4]])
sorted_arr_row = np.sort(arr, axis=1)
print(sorted_arr_row)
# 按列排序
sorted_arr_col = np.sort(arr, axis=0)
print(sorted_arr_col)
'''
输出:
[[1 2 3]
[4 5 6]]
[[3 2 1]
[6 5 4]]
'''
原地排序:可以使用 ndarray.sort()
方法在原地对数组进行排序,即直接修改原始数组。示例代码:
import numpy as np
arr = np.array([3, 2, 1, 6, 5, 4])
arr.sort()
print(arr)
'''
输出:
[1 2 3 4 5 6]
'''
按指定条件排序:可以使用 np.argsort()
函数获取数组排序后的索引,或者使用 np.lexsort()
函数根据多个键进行排序。示例代码:
import numpy as np
arr = np.array([3, 2, 1, 6, 5, 4])
sorted_indices = np.argsort(arr)
print(sorted_indices)
arr2 = np.array([3, 2, 1])
arr3 = np.array([6, 5, 4])
sorted_arr = np.lexsort((arr2, arr3))
print(sorted_arr)
'''
输出:
[2 1 0 5 4 3]
[2 1 0]
'''
以上是一些常见的 NumPy 数组排序操作。此外,NumPy 还提供了其他排序相关的函数和方法,如 np.partition()
、np.argsort()
、np.argpartition()
等,可以根据具体需求选择合适的排序方法。
在给定的 NumPy 数组中找到最接近的值,可以使用 NumPy 的 np.abs()
函数和 np.argmin()
函数的结合来实现。下面是一种常见的方法:
import numpy as np
def find_nearest_value(arr, value):
# 计算数组中每个元素与目标值的差值的绝对值
diff = np.abs(arr - value)
# 返回差值绝对值最小的元素的索引
nearest_index = np.argmin(diff)
return arr[nearest_index]
# 示例用法
arr = np.array([1.2, 2.5, 3.7, 4.1, 5.6])
value = 3.3
nearest_value = find_nearest_value(arr, value)
print(nearest_value)
'''
输出:
3.7
'''
上述示例中,find_nearest_value()
函数它首先计算数组中每个元素与目标值的差值的绝对值,然后使用 np.argmin()
函数找到差值绝对值最小的元素的索引,最后返回该索引对应的值。
这样就可以在给定的 NumPy 数组中找到最接近的值,并返回最接近值所在的位置
NumPy 提供了多种方法将数组保存到文件中,常用的方法包括:
np.savetxt()
函数:这个函数可以将一个或多个 NumPy 数组以文本格式保存到文件中。默认情况下,每个数组的元素被写成浮点数,并以空格分隔。示例代码:
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])
np.savetxt('data.txt', data)
这将把数组 data
保存为文本文件 data.txt
。
np.save()
和 np.savez()
函数:这两个函数可以将一个或多个 NumPy 数组以二进制格式保存到文件中。np.save()
函数用于保存单个数组,而 np.savez()
函数用于保存多个数组。示例代码:
import numpy as np
data = np.array([1, 2, 3])
np.save('data.npy', data)
这将把数组 data
保存为二进制文件 data.npy
。
np.savez_compressed()
函数:这个函数与 np.savez()
类似,但会使用压缩算法来减小文件大小,适用于大型数据集。示例代码:
import numpy as np
data1 = np.array([1, 2, 3])
data2 = np.array([4, 5, 6])
np.savez_compressed('data.npz', data1=data1, data2=data2)
这将把数组 data1
和 data2
保存为压缩的二进制文件 data.npz
。
需要注意的是,使用这些函数保存数组时,文件名需要包括合适的扩展名(如
.txt
、.npy
、.npz
等),以便指定保存的文件类型。