【发布时间】:2019-06-30 22:37:10
【问题描述】:
我需要计算具有数组 D 的数组 Z(仅使用索引、切片和广播,没有循环):
D = [0, 0, 0, 0, 12, 36, 24, 24, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 36]
Z = [nan, nan, nan, nan, 12., 14.4, 15.36, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 16.224, 15.8016, 15.8016, 15.8016, 15.8016, 17.8214]
规则#1:在 D 的第一个非零值之前(此处索引 数组 Z 值等于 nan(此处索引 0 到 3)
规则#2:D 的第一个非零值(此处为索引 4,值 12)=> 数组 Z 在该索引 (12) 处获取 A 的值
规则#3:遵循规则#2,如果 D 在索引 i 处不等于 0 => Z[i] = Z[i-1] + 0.1 * (D[i] - Z[i-1] )
即:
ind=4: D[4]=12 => Z[4]=12 (Rule#2)
ind=5: D[5]=36 => Z[5]=12 + 0.1 * (36 - 12) = 14.4
ind=6: D[6]=24 => Z[6]=14.4 + 0.1 * (24 - 14.4) = 15.36
ind=7: D[7]=24 => Z[7]=15.36 + 0.1 * (24 - 15.36) = 16.224
规则#4:如果 D 等于 0(此处索引 i = 8)=> Z[i] = Z[i-1]
即:
ind=8: D[8]=0 => D[8]=D[7]=16.224
【问题讨论】:
标签: python numpy numpy-ndarray array-broadcasting numpy-slicing