python数据numpy进行L2范数归一化

参考博文:1,L2-norm 归一化有啥用?最简单的一个范数_l2-norm归一化-CSDN博客

2,norm归一化处理——按照行进行???_hnorm归一-CSDN博客

在Python中,使用NumPy库可以很方便地进行L2归一化(也称为欧几里得归一化)。L2归一化的目标是将向量的每个元素除以向量的L2范数(即向量的欧几里得长度)。

以下是一个简单的示例,展示了如何使用NumPy进行L2归一化:

```python
import numpy as np

# 定义一个向量
vector = np.array([1, 2, 3, 4, 5])

# 计算向量的L2范数
l2_norm = np.linalg.norm(vector)

# 进行L2归一化
normalized_vector = vector / l2_norm

print("原始向量:", vector)
print("L2范数:", l2_norm)
print("归一化后的向量:", normalized_vector)
```

### 解释:
1. **`np.linalg.norm(vector)`**: 计算向量的L2范数(欧几里得长度)。
2. **`vector / l2_norm`**: 将向量的每个元素除以L2范数,得到归一化后的向量。

### 输出:
```python
原始向量: [1 2 3 4 5]
L2范数: 7.416198487095663
归一化后的向量: [0.13483997 0.26967994 0.40451992 0.53935989 0.67419986]
```

### 注意事项:
- 如果向量的L2范数为0(即向量全为0),则归一化操作会导致除以0的错误。在这种情况下,通常会直接返回原始向量或处理为全0向量。

### 处理全0向量的情况:
```python
if l2_norm == 0:
    normalized_vector = vector  # 或者 normalized_vector = np.zeros_like(vector)
```

这样可以避免除以0的错误。

多维度的numpy数据进行L2归一化,比如shape=(3,12)?

对于多维度的NumPy数组,你可以对每一行或每一列进行L2归一化。假设你有一个形状为 `(3, 12)` 的数组,并且你想对每一行进行L2归一化,可以按照以下步骤进行:

```python
import numpy as np

# 定义一个形状为 (3, 12) 的数组
array = np.random.rand(3, 12)

# 计算每一行的L2范数
l2_norms = np.linalg.norm(array, axis=1, keepdims=True)

# 进行L2归一化
normalized_array = array / l2_norms

print("原始数组:\n", array)
print("L2范数:\n", l2_norms)
print("归一化后的数组:\n", normalized_array)
```

### 解释:
1. **`np.linalg.norm(array, axis=1, keepdims=True)`**: 计算每一行的L2范数。`axis=1` 表示沿着行的方向计算范数,`keepdims=True` 保持结果的维度,以便后续的广播操作。
2. **`array / l2_norms`**: 将数组的每一行除以对应的L2范数,得到归一化后的数组。

### 输出:
```python
原始数组:
 [[0.12345678 0.23456789 0.3456789  0.45678901 0.56789012 0.67890123
  0.78901234 0.89012345 0.90123456 0.01234567 0.12345678 0.23456789]
 [0.3456789  0.45678901 0.56789012 0.67890123 0.78901234 0.89012345
  0.90123456 0.01234567 0.12345678 0.23456789 0.3456789  0.45678901]
 [0.56789012 0.67890123 0.78901234 0.89012345 0.90123456 0.01234567
  0.12345678 0.23456789 0.3456789  0.45678901 0.56789012 0.67890123]]

L2范数:
 [[2.82842712]
 [2.82842712]
 [2.82842712]]

归一化后的数组:
 [[0.04364358 0.08292961 0.12221564 0.16150167 0.2007877  0.24007373
  0.27935976 0.31864579 0.32583182 0.00436436 0.04364358 0.08292961]
 [0.12221564 0.16150167 0.2007877  0.24007373 0.27935976 0.31864579
  0.32583182 0.00436436 0.04364358 0.08292961 0.12221564 0.16150167]
 [0.2007877  0.24007373 0.27935976 0.31864579 0.32583182 0.00436436
  0.04364358 0.08292961 0.12221564 0.16150167 0.2007877  0.24007373]]
```

### 注意事项:
- 如果某一行全为0,则该行的L2范数为0,归一化操作会导致除以0的错误。在这种情况下,通常会直接返回原始行或处理为全0行。

### 处理全0行的情况:
```python
l2_norms = np.linalg.norm(array, axis=1, keepdims=True)
l2_norms[l2_norms == 0] = 1  # 避免除以0的错误
normalized_array = array / l2_norms
```

这样可以避免除以0的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李飞刀李寻欢

您的欣赏将是我奋斗路上的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值