ToB企服应用市场:ToB评测及商务社交产业平台

标题: python3 numpy的一些小知识点 [打印本页]

作者: 千千梦丶琪    时间: 2024-9-24 11:41
标题: python3 numpy的一些小知识点
简介

一个用python实现的科学计算,包括:
1、一个强大的N维数组对象Array;
2、比较成熟的(广播)函数库;
3、用于整合C/C++和Fortran代码的工具包;
4、实用的线性代数、傅里叶变更和随机数生成函数。
numpy和稀疏矩阵运算包scipy配合利用更加方便。NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为许多大型金融公司利用,以及焦点的科学计算组织如:Lawrence Livermore,NASA用其处理一些本来利用C++,Fortran或Matlab等所做的任务。
NumPy 的前身为 Numeric ,最早由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中联合了另一个同性质的步伐库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。
利用方法

NumPy 是一个强大的 Python 库,广泛用于科学计算和数据处理。以下是一些 NumPy 在数据处理时常用的主要函数,以及利用时的注意事项:
主要函数

利用注意事项

知识点

NumPy 是 Python 数据科学和呆板学习范畴中的焦点库之一,因此它经常成为面试中的话题。以下是一些关于 NumPy 的高频面试标题以及相应的答案:
NumPy 中的 ndarray 是什么?

ndarray 是 NumPy 中的一个焦点对象,用于存储同质类型的元素(如整数、浮点数等)。它是一个多维数组,可以进行高效的元素级操作。
如何创建一个外形为 (3, 4) 的 NumPy 数组,并且用 0 填充?

答案:
  1. import numpy as np
  2. array = np.zeros((3, 4))
复制代码
这将创建一个 3 行 4 列的数组,所有元素都是 0。
如何获取 NumPy 数组的外形?
  1. import numpy as np
  2. array = np.array([[1, 2, 3], [4, 5, 6]])
  3. shape = array.shape
复制代码
shape 属性会返回一个元组,表示数组的外形。
如何改变 NumPy 数组的外形而不改变其数据?
  1. import numpy as np
  2. array = np.array([[1, 2, 3], [4, 5, 6]])
  3. reshaped_array = array.reshape(3, 2)
复制代码
这将把原数组改变为 3 行 2 列的外形。
如何将 Python 列表转换为 NumPy 数组?

利用 np.array() 函数可以将 Python 列表转换为 NumPy 数组。
如何计算 NumPy 数组的均值、标准差和方差?

分别利用 np.mean()、np.std() 和 np.var() 函数。例如均值计算如下:
  1. import numpy as np
  2. array = np.array([1, 2, 3, 4, 5])
  3. mean_value = np.mean(array)
复制代码
np.mean() 函数可以计算数组的均值。
如何在 NumPy 数组中进行元素级别的操作?

NumPy 支持元素级别的操作,这意味着你可以对数组中的每个元素应用算术运算或其他函数。例如:
  1. import numpy as np
  2. array1 = np.array([1, 2, 3])
  3. array2 = np.array([4, 5, 6])
  4. added_array = array1 + array2
复制代码
这将返回一个新数组 [5, 7, 9]。
如何利用 NumPy 生成随机数?
  1. import numpy as np
  2. random_array = np.random.rand(3, 4)
复制代码
np.random.rand() 函数可以生成一个给定外形的数组,其元素是从 [0, 1) 区间内均匀分布的随机数。
如何检查一个 NumPy 数组是否包含任何 NaN 值?
  1. import numpy as np
  2. array = np.array([1, 2, np.nan, 4])
  3. contains_nan = np.isnan(array)
复制代码
np.isnan() 函数可以返回一个布尔数组,指示哪些位置是 NaN。
如何在 NumPy 数组中进行条件筛选?
  1. import numpy as np
  2. array = np.array([1, 2, 3, 4, 5])
  3. filtered_array = array[array > 2]
复制代码
这将返回一个新数组 [3, 4, 5],包含所有大于 2 的元素。
解释 NumPy 中的 dtype。

在 NumPy 中,dtype 是一个非常重要的概念,它代表数据类型(Data Type)。每个 NumPy 数组都有一个与之相干的 dtype,它指定了数组中每个元素的数据类型。这有助于 NumPy 在内存中有效地存储和处理数据。
dtype 的关键点

常见的 NumPy 数据类型:

示例

创建一个具有特定 dtype 的 NumPy 数组:
  1. import numpy as np
  2. # 创建一个整数类型的数组
  3. int_array = np.array([1, 2, 3], dtype=np.int32)
  4. print(int_array.dtype)  # 输出:int32
  5. # 创建一个浮点数类型的数组
  6. float_array = np.array([1.0, 2.0, 3.0], dtype=np.float64)
  7. print(float_array.dtype)  # 输出:float64
  8. # 创建一个布尔类型的数组
  9. bool_array = np.array([True, False, True], dtype=bool)
  10. print(bool_array.dtype)  # 输出:bool
复制代码
注意事项

dtype 是 NumPy 数组的一个重要属性,了解和精确利用 dtype 对于进行高效的数值计算至关重要。
为什么 NumPy 比 Python 原生列表更快?

如何优化 NumPy 代码的性能?

答案:利用向量化操作而不是循环,避免不必要地复制数据,利用得当的数据类型,以及并行处理(如利用 np.dot 替代 for 循环计算点积)。
解释 NumPy 中的广播机制。

NumPy 中的广播(Broadcasting)机制是一种强大的功能,它允许不同外形的数组在数学运算中协同工作,而不需要显式地匹配它们的外形。广播机制遵循以下规则:
例如:
  1. import numpy as np
  2. # 创建两个数组
  3. a = np.array([1, 2, 3])  # 形状为 (3,)
  4. b = np.array([[1], [2], [3]])  # 形状为 (3, 1)
  5. # 广播相加
  6. c = a + b  # 结果是一个形状为 (3, 3) 的数组
  7. print(c)
  8. # 输出:
  9. # [[2 2 2]
  10. #  [3 3 3]
  11. #  [4 4 4]]
复制代码
在这个例子中,a 的外形是 (3,),b 的外形是 (3, 1)。根据广播规则,a 被扩展到 (3, 3),b 也被扩展到 (3, 3),然后进行逐元素相加。
广播机制使得 NumPy 在执行元素级操作时非常高效,因为它避免了不必要的数组复制和循环。然而,它也有潜在的缺点,好比偶然可能会导致不测的结果,特别是在数组外形复杂或操作不明白时。因此,理解广播机制对于编写清晰、高效的 NumPy 代码至关重要。
在呆板学习中,如何利用 NumPy 进行特征缩放?

在呆板学习中,特征缩放是一种重要的预处理步骤,它有助于改善模型的性能和收敛速度。特征缩放包括多种技能,其中最常见的是最小-最大归一化(Min-Max Scaling)和标准化(Standardization)。以下是如何利用 NumPy 进行这两种特征缩放的方法:
最小-最大归一化(Min-Max Scaling)

最小-最大归一化将特征缩放到一个指定的范围,通常是 [0, 1]。这种方法对于保持数据中的特征比例很有效。
  1. import numpy as np
  2. # 假设 X 是一个形状为 (n_samples, n_features) 的数据数组
  3. X = np.array([[1, 2, 3],
  4.               [4, 5, 6],
  5.               [7, 8, 9]])
  6. # 计算每个特征的最小值和最大值
  7. X_min = X.min(axis=0)
  8. X_max = X.max(axis=0)
  9. # 执行最小-最大归一化
  10. X_scaled = (X - X_min) / (X_max - X_min)
  11. print(X_scaled)
复制代码
标准化(Standardization)

标准化(也称为 Z-score 归一化)将特征缩放,使得它们的均值为 0,标准差为 1。这有助于确保不同特征的尺度不会影响模型的优化过程。
  1. # 假设 X 是一个形状为 (n_samples, n_features) 的数据数组
  2. X = np.array([[1, 2, 3],
  3.               [4, 5, 6],
  4.               [7, 8, 9]])
  5. # 计算每个特征的均值和标准差
  6. X_mean = X.mean(axis=0)
  7. X_std = X.std(axis=0)
  8. # 执行标准化
  9. X_standardized = (X - X_mean) / X_std
  10. print(X_standardized)
复制代码
注意事项

利用 NumPy 进行特征缩放是直接且高效的,但请注意,NumPy 不提供内置的函数来自动应用这些缩放技能。在实践中,scikit-learn 库提供了更高级的特征缩放方法,如 MinMaxScaler 和 StandardScaler,它们可以更方便地处理这些问题。
如何利用 NumPy 进行主成分分析(PCA)?

步骤 1: 准备数据

首先,你需要一个外形为 (n_samples, n_features) 的数据数组。
  1. import numpy as np
  2. # 示例数据
  3. X = np.array([[1, 2, 3],
  4.               [4, 5, 6],
  5.               [7, 8, 9]])
复制代码
步骤 2: 数据标准化

PCA 对数据的尺度非常敏感,因此通常需要先标准化数据。
  1. X_centered = X - np.mean(X, axis=0)
  2. X_std = np.std(X_centered, axis=0)
  3. X_normalized = X_centered / X_std
复制代码
步骤 3: 计算协方差矩阵

协方差矩阵用于找到数据的主成分。
  1. cov_matrix = np.cov(X_normalized.T)
复制代码
步骤 4: 计算特征值和特征向量

特征值和特征向量表示了数据的主成分方向。
  1. eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)
复制代码
步骤 5: 选择主成分

选择最大的几个特征值对应的特征向量作为主成分。
  1. # 按特征值大小降序排序特征向量
  2. sorted_index = np.argsort(eigenvalues)[::-1]
  3. principal_components = eigenvectors[:, sorted_index[:n_components]]
复制代码
其中 n_components 是你想要保存的成分数量。
步骤 6: 转换数据

将原始数据投影到选定的主成分上。
  1. X_pca = np.dot(X_normalized, principal_components)
复制代码
利用 X_pca 可以得到降维后的数据。
NumPy PCA 示例代码
  1. import numpy as np
  2. # 示例数据
  3. X = np.array([[1, 2, 3],
  4.               [4, 5, 6],
  5.               [7, 8, 9]])# 标准化数据X_centered = X - np.mean(X, axis=0)
  6. X_std = np.std(X_centered, axis=0)
  7. X_normalized = X_centered / X_std# 计算协方差矩阵cov_matrix = np.cov(X_normalized.T)# 计算特征值和特征向量eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)# 按特征值大小降序排序特征向量sorted_index = np.argsort(eigenvalues)[::-1]n_components = 2  # 选择前两个主成分principal_components = eigenvectors[:, sorted_index[:n_components]]# 转换数据X_pca = np.dot(X_normalized, principal_components)print(X_pca)
复制代码
注意事项

利用 scikit-learn 的 PCA 实现非常简单:
  1. from sklearn.decomposition import PCA
  2. # 示例数据
  3. X = np.array([[1, 2, 3],
  4.               [4, 5, 6],
  5.               [7, 8, 9]])
  6. # 初始化 PCA,n_components 为需要保留的成分数量
  7. pca = PCA(n_components=2)
  8. # 对数据进行拟合和转换
  9. X_pca = pca.fit_transform(X)
  10. print(X_pca)
复制代码
这种方法更加简洁,且 scikit-learn 会自动处理数据标准化和奇特值分解(SVD)。
如果有错误的地方欢迎大佬品评指正,谢谢


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4