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

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊

文章目录

  • 系列文章目录
  • Python Numpy 面试问题
    • 51. 什么是 NumPy?
    • 52. NumPy 数组比 python 列表更具哪些优势?
    • 53. 如何创建一个 NumPy 数组?
    • 54. Numpy 如何从文本文件中加载数据?
    • 55. 如何获取NumPy数组的维度和形状?
    • 56. NumPy 数组有哪些操作
    • 57. 如何对 NumPy 数组进行排序操作?
    • 58. 如何在给定的 Numpy 数组中找到最接近的值?
    • 59. 如何将 NumPy 数组保存到文件中?
  • Python Pandas面试问题:[华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)](https://blog.csdn.net/a2360051431/article/details/131776745)

本文是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)
    
  2. 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]]
    '''
    
  2. 原地排序:可以使用 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]
    '''
    
  3. 按指定条件排序:可以使用 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)
    

    这将把数组 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)
    

    这将把数组 data 保存为二进制文件 data.npy

  3. 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)
    

    这将把数组 data1data2 保存为压缩的二进制文件 data.npz

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

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

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2023年8月15日
下一篇 2023年8月15日

相关推荐