Numpy的广播功能

当我学习logitic函数,想用Python画出曲线。第一个版本这么实现:

import numpy as np import matplotlib.pyplot as plt def logistic(x): return 1 /( 1 + np.exp(-x)) x = np.arange(-10, 10, 0.01) y = logistic(x) plt.plot(x,y) plt.show()

很好奇这个也能工作。内部依赖于Numpy的广播功能,当一个标量和向量运算时候。自动形成标量和向量的每个元素运算。

def logistic(x): y = [] for i in x: y.append(1/(1 + np.exp(-i))) return y 这个函数的啰嗦写法。

转载于:https://my.oschina.net/u/612750/blog/2885608

### Numpy 广播机制及其用法 Numpy广播机制是一种强大的功能,允许不同形状的数组进行算术运算。当两个数组的维度不完全匹配时,Numpy 会自动扩展较小的数组以适应较大的数组尺寸[^1]。 #### 基本原理 广播的核心在于如何处理形状不同的数组之间的操作。具体来说,如果两个数组的维数从右向左逐一比较满足以下条件之一,则可以执行广播: 1. 维度大小相等。 2. 其中一个维度的大小为 1。 如果不满足上述任一条件,则会抛出 `ValueError` 表明无法广播这两个数组。 #### 示例代码展示 以下是几个简单的例子来演示广播的工作方式: ```python import numpy as np # 创建一个二维数组和一个一维数组 a = np.array([[0, 0], [10, 10]]) b = np.array([1, 2]) # 执行加法操作 result = a + b print(result) ``` 在这个例子中,尽管 `a` 是一个 (2, 2) 数组而 `b` 只是一个长度为 2 的一维数组,但由于广播的存在,`b` 被视为具有形状 `(1, 2)` 的数组并沿第一个轴复制两次以便与 `a` 进行逐元素加法计算。 #### 高级应用案例 除了基本的四则运算外,在更复杂的场景下也可以利用广播简化代码逻辑。比如实现矩阵每列减去其均值的操作: ```python matrix = np.random.rand(4, 5) col_means = matrix.mean(axis=0) centered_matrix = matrix - col_means[:, None] print(centered_matrix.shape) # 输出应仍为 (4, 5),因为进行了广播 ``` 这里通过增加一个新的轴 (`None`) 来调整 `col_means` 形状使其能够正确地应用于每一行数据上完成中心化处理。 #### 性能考量 虽然广播提供了极大的灵活性,但在涉及大规模数据集或者复杂模型训练过程中需要注意内存消耗以及潜在性能瓶颈问题。对于某些特定需求可能还需要借助其他技术手段如近似统计方法等进一步优化效率[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值