python数据处理numpy
时间: 2025-01-13 14:33:57 浏览: 36
### 使用 Python 和 NumPy 进行数据处理
#### 数组创建与基本操作
NumPy 提供了一个强大的多维数组对象 `ndarray` 及一系列用于处理这些数组的操作函数。通过导入 NumPy 库并使用其功能可以高效地完成各种数值计算任务。
```python
import numpy as np
# 创建一维数组
a = np.array([1, 2, 3])
print(a)
# 创建二维数组
b = np.array([[1, 2], [3, 4]])
print(b)
```
对于更复杂的初始化需求,还可以利用内置方法来快速构建特定模式的数据结构:
```python
c = np.zeros((3, 4)) # 全零矩阵
d = np.ones((2, 3)) # 全幺矩阵
e = np.eye(3) # 单位阵
f = np.arange(0, 9).reshape(3, 3) # 线性序列重塑成指定形状
g = np.linspace(0, 1, 5)# 均匀分布于给定区间的样本点
h = np.random.rand(2, 2)# 随机数构成的数组
i = np.full((2, 2), 7) # 所有元素均为常量值的数组
j = np.empty((2, 2)) # 不初始化任何值的新数组
k = np.fromfunction(lambda i,j:i+j,(3,3))
l = np.loadtxt('data.txt') # 加载文件中的数据到数组里
m = np.genfromtxt('data.csv', delimiter=',')
n = np.save('my_array.npy', a) # 将数组保存至二进制文件(.npy,.npz)
o = np.load('my_array.npy') # 读取之前存储过的.npz/.npy文件
```
#### 数据索引、切片和迭代
除了常规的一维列表式的访问方式外,NumPy 支持更加灵活便捷的方式来进行子集选取以及遍历整个数组内的每一个元素。
```python
arr = np.array([[1, 2, 3],
[4, 5, 6]])
# 获取单个元素
element = arr[0][1]
# 切片获取部分区域
sub_arr = arr[: , :2]
for row in arr:
print(row)
flat_iter = iter(arr.flat)
while True:
try:
item = next(flat_iter)
print(item)
except StopIteration:
break
```
#### 广播机制
广播允许不同大小但兼容维度之间的算术运算自动扩展较小的那个直到两者匹配为止;这使得即使当两个参与者的尺寸不完全相同时也能顺利完成加减乘除等常见数学运算。
```python
x = np.array([[1., 2., 3.]]) # 形状为 (1, 3)
y = np.array([[4.], [5.], [6.]]) # 形状为 (3, 1)
result_addition = x + y # 结果形状变为 (3, 3),即 [[5., 6., 7.],[6., 7., 8.],[7., 8., 9.]]
```
#### 向量化表达式替代显式循环
向量化意味着尽可能多地采用内建支持批量处理的功能而非手动编写逐项更新逻辑——这样做不仅能够简化代码而且往往带来显著性能提升因为底层实现通常是经过高度优化后的C/C++版本[^2]。
```python
def compute_euclidean_distance_loop(vectors):
distances = []
n_samples = vectors.shape[0]
for idx_i in range(n_samples):
distance_row = []
for idx_j in range(idx_i+1,n_samples):
diff_sqrd_sum = sum((vectors[idx_i]-vectors[idx_j])**2)
dist_ij = sqrt(diff_sqrd_sum)
distance_row.append(dist_ij)
distances.append(distance_row)
return distances
def compute_euclidean_distances_vectorized(vectors):
diffs_squared_sums = ((vectors[:,None,:] - vectors)**2).sum(axis=-1)
upper_triangle_indices = tril_indices_from(diffs_squared_sums,k=1)
result = diffs_squared_sums[upper_triangle_indices].tolist()
return result
```
阅读全文
相关推荐

















