华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(四)

简介: 华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(四)

本文是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等。

  1. 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 数组排序操作:

  1. 按行或列排序:可以使用 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 提供了多种方法将数组保存到文件中,常用的方法包括:

  1. np.savetxt() 函数:这个函数可以将一个或多个 NumPy 数组以文本格式保存到文件中。默认情况下,每个数组的元素被写成浮点数,并以空格分隔。示例代码:
import numpy as np
data = np.array([[1, 2, 3], [4, 5, 6]])
np.savetxt('data.txt', data)
  1. 这将把数组 data 保存为文本文件 data.txt
  2. np.save()np.savez() 函数:这两个函数可以将一个或多个 NumPy 数组以二进制格式保存到文件中。np.save() 函数用于保存单个数组,而 np.savez() 函数用于保存多个数组。示例代码:
import numpy as np
data = np.array([1, 2, 3])
np.save('data.npy', data)
  1. 这将把数组 data 保存为二进制文件 data.npy
  2. 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)
  1. 这将把数组 data1data2 保存为压缩的二进制文件 data.npz

需要注意的是,使用这些函数保存数组时,文件名需要包括合适的扩展名(如 .txt.npy.npz 等),以便指定保存的文件类型。

Python Pandas面试问题:华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)

相关文章
|
2月前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
60 3
|
2月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
2月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
2月前
|
算法 Java Linux
python中的面试常考知识点
python中的面试常考知识点
|
4月前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
|
4月前
|
数据采集 Java 数据挖掘
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
最新Python+OpenCV+dlib汽车驾驶员疲劳驾驶检测!,2024年最新网易云java面试
|
4月前
|
数据采集 算法 网络协议
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
|
4月前
|
SQL 分布式计算 前端开发
10个常见的python面试问题_python面试常见问题
10个常见的python面试问题_python面试常见问题
|
22天前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
22天前
|
XML 存储 JSON
【IO面试题 六】、 除了Java自带的序列化之外,你还了解哪些序列化工具?
除了Java自带的序列化,常见的序列化工具还包括JSON(如jackson、gson、fastjson)、Protobuf、Thrift和Avro,各具特点,适用于不同的应用场景和性能需求。