文章目录
什么是NumPy数组(ndarray)?
NumPy数组,简称ndarray,是NumPy库的核心数据结构。它是一个多维数组对象,用于存储同类型的数据,可以是整数、浮点数、复数等。ndarray的属性和方法使得在数据处理和数学计算中变得非常便捷。
ndarray的属性
1. 形状(shape)
ndarray的shape属性返回一个元组,描述了数组的维度。例如,一个形状为(3, 4)的ndarray表示它是一个3行4列的二维数组。
import numpy as np
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
print(arr.shape) # 输出 (3, 4)
2. 数据类型(dtype)
dtype属性返回数组中元素的数据类型。NumPy支持多种数据类型,包括整数、浮点数、复数等。你可以使用dtype来了解数组中元素的数据类型。
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr.dtype) # 输出 int64
arr = np.array([1.0, 2.5, 3.7])
print(arr.dtype) # 输出 float64
3. 维度(ndim)
ndim属性返回数组的维度数目,即数组的秩(rank)。例如,一个一维数组的秩为1,二维数组的秩为2,以此类推。
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr.ndim) # 输出 1
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
print(arr.ndim) # 输出 2
4. 元素个数(size)
size属性返回数组中元素的总个数,即数组的大小。
import numpy as np
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
print(arr.size) # 输出 8
5. 元素访问
通过索引访问ndarray中的元素。可以使用不同的索引方式来访问单个元素、切片、以及多维数组中的元素。
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 访问单个元素
print(arr[0, 0]) # 输出 1
# 切片
print(arr[:, 1]) # 输出 [2 5 8]
# 多维数组访问
print(arr[1:3, 1:3])
# 输出:
# [[5 6]
# [8 9]]
Numpy 基本矩阵操作
1. 创建矩阵
import numpy as np
# 创建一维数组
a = np.array([1, 2, 3, 4])
# 创建二维数组
b = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
2. 获取矩阵的形状和数据类型
import numpy as np
a = np.arange(1, 11)
print("数组大小:", a.shape)
print("数组类型:", a.dtype)
3. 矩阵运算
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([5, 6, 7, 8])
print("a+b=", a + b)
print("a-b=", a - b)
print("a*b=", a * b)
print("a/b=", a / b)
print("a的平方=", np.power(a, 2))
4. 索引和切片
import numpy as np
a = np.array([1, 2, 3, 4])
print("a的第一个元素为:", a[0])
print("a的前三个元素为:", a[:3])
5. 维度转换
import numpy as np
a = np.arange(1, 13)
print("a的原始形状为:", a.shape)
# 利用 reshape 函数将 a 重构为 3 行 4 列的数组
b = np.reshape(a, (3, 4))
print("b的形状为:", b.shape)
print(b)
# 利用 flatten 函数将 b 降为 1 维
c = b.flatten()
print("c的形状为:", c.shape)
print(c)
Numpy 处理缺失值
import numpy as np
data = np.array([[1, np.nan, 3],
[4, 5, 6],
[7, np.nan, 9]])
# 计算每行的均值
row_means = np.nanmean(data, axis=1)
# 找出为 NaN 的元素
nan_indices = np.isnan(data)
# 根据均值替换 NaN 值
row_indices, col_indices = np.where(nan_indices)
data[row_indices, col_indices] = row_means[row_indices]
print(data)
在上述例子中,我们使用了 np.nanmean
函数计算每行的均值,np.isnan
函数找出为 NaN 的元素,并使用 np.where
函数获取这些元素的索引。然后,根据均值替换 NaN 值,从而处理了缺失值的情况。