python - Numpy 迭代数组操作
问题描述
我已经开始通过使用 numpy 数组操作来删除越来越多的 for 循环。但是,我坚持以下情况。欢迎任何帮助。
我从长度为 L 的数组和另一个长度为 L 的数组中的单个已知值 ( 0.55
)开始。我想使用交叉乘法填充第一个数组中的剩余值。A
B
这给了我想要的输出:
def cross_mult(B, starting_A = 0.55):
A= np.zeros(B.shape)
A[0] = starting_A
for i in range(B.shape[0])[1:]:
A[i] = A[i-1] * B[i] / B[i-1]
return A
没有 for 循环的尝试失败:
def cross_mult(B, starting_A = 0.55):
A= np.zeros(B.shape)
A[0] = starting_A
A[1:] = A[:-1] * B[1:] / B[:-1]
return A
我得到:
array([0.55 , 0.60401715, 0. ])
而不是其中包含三个值的完全填充的数组。
解决方案
向量化这个函数的问题是每个索引的计算实际上确实依赖于它之前的索引,所以计算必须按顺序进行。
据我所知,在这种情况下你被困在循环中:)
如果你真的想避免显式使用循环,你可以使用accumulate
:
def cross_mult(B, starting_A = 0.55):
A= np.zeros(B.shape)
A[0] = starting_A
A[1:] = B[1:] / B[:-1]
return np.multiply.accumulate(A)
推荐阅读
- java - Spring Boot - 从 application.yml 注入静态地图
- sql - 如何通过 SQL 语法获取分区中的最大行数?
- javascript - jQuery JSON 将时间值转换为数值
- c# - 在 if 语句中使用来自 Web 服务的 C# HttpWebRequest 的 HttpWebResponse 变量
- windows - Onidle 任务在特定日期之后开始
- bash - 天蓝色服务器上的 Angular 7 部署
- wordpress - 将自定义帖子类型编辑和列表屏幕显示为单独的子菜单项
- c# - 将 Excel 文件加载到 DataTable 或 DateSet 的 C# 方法
- youtube-livestreaming-api - Youtube Java 直播
- c - 计算写入文件的矩阵中元素的总数