系列文章目录
个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊
文章目录
本文是Python面试专栏的第四篇。在本专栏中,我将总结华为、阿里巴巴、字节跳动等互联网公司 Python 面试中最常见的 100+ 问题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及 Python 基础知识、Python 编程、数据分析以及 Python 函数库等多个方面。
Python Numpy 面试问题
51. 什么是 NumPy?
NumPy 是 Python 的一个开源科学计算库,用于处理大型多维数组和矩阵。它是许多其他科学计算库的基础,如 pandas、SciPy 等。NumPy 提供了高性能的数组对象(array),以及对数组进行操作的各种函数。
52. NumPy 数组比 python 列表更具哪些优势?
NumPy 数组相对于 Python 列表具有以下几个优势:
-
性能效率高:NumPy 数组是使用 C 语言编写的,因此在处理大规模数据时具有更高的性能效率。它们支持向量化操作,可以一次性对整个数组执行相同的操作,而无需遍历每个元素。这种优化使得 NumPy 数组在数值计算和科学计算领域中非常受欢迎。
-
内存占用少:NumPy 数组使用连续的内存块来存储数据,相对于 Python 列表中的对象引用,它们不需要额外的内存来存储指针。这也使得 NumPy 数组在处理大型数据集时更加高效,并且减少了内存消耗。
-
广泛的数学函数和运算符支持:NumPy 提供了许多内置的数学函数和运算符,使得对数组进行各种数学和统计运算更加方便。例如,对数组应用三角函数、指数函数、平均值、标准差等操作非常简单。
-
广泛的索引和切片功能:NumPy 数组支持直接通过索引和切片操作来访问和修改数组中的元素,提供了更灵活和高效的数据访问方式。此外,NumPy 还提供了强大的布尔索引功能,可以根据条件对数组进行筛选和过滤。
-
向量化操作:NumPy 数组支持向量化操作,允许对整个数组或数组的子集执行相同的操作,而无需使用显式循环。这种向量化操作能够提高代码的简洁性、可读性和运行效率。
53. 如何创建一个 NumPy 数组?
可以使用多种方式来创建 NumPy 数组,包括从列表、元组、NumPy 函数、外部文件等。下面是几个常用的创建 NumPy 数组的方法:
-
从列表或元组创建:
arr = np.array([1, 2, 3])
-
使用 NumPy 函数创建:
arr = np.zeros((3, 3))
-
从外部文件读取:
arr = np.load('data.npy')
54. Numpy 如何从文本文件中加载数据?
在 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()
函数可以从二进制文件中加载数据。
55. 如何获取NumPy数组的维度和形状?
-
要获取 NumPy 数组的维度,可以使用
ndim
属性。例如,对于一个二维数组arr
,可以使用arr.ndim
来获取其维度。 -
要获取 NumPy 数组的形状,可以使用
shape
属性。例如,对于一个二维数组arr
,可以使用arr.shape
来获取其形状。
56. NumPy 数组有哪些操作
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()
函数计算方阵的逆矩阵、行列式、特征值和特征向量、迹等。
57. 如何对 NumPy 数组进行排序操作?
在 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()
等,可以根据具体需求选择合适的排序方法。
58. 如何在给定的 Numpy 数组中找到最接近的值?
在给定的 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 数组中找到最接近的值,并返回最接近值所在的位置
59. 如何将 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
等),以便指定保存的文件类型。