如何用单行函数实现复向量内积(无动态集合/非Numpy)
复向量内积的单行实现方案
核心要求回顾
需实现符合以下签名的单行函数,计算两个复向量的内积(对应位置元素执行u(i) * 共轭(v(i))后求和):
def inner_product_c(c1: Iterable[complex], c2: Iterable[complex]) -> complex: # 单行实现代码
同时需满足:
- 不能创建列表、元组等非固定长度集合
- 禁止使用Numpy
几种可行的单行实现方式
方式1:sum + 生成器表达式(无需额外导入)
这是最简洁直观的实现,生成器表达式直接传入sum,不会创建额外集合:
def inner_product_c(c1: Iterable[complex], c2: Iterable[complex]) -> complex: return sum(u * v.conjugate() for u, v in zip(c1, c2))
方式2:functools.reduce 累加实现
借助reduce逐步累加每一项的计算结果,初始值设为0j保证结果为复数类型:
from functools import reduce def inner_product_c(c1: Iterable[complex], c2: Iterable[complex]) -> complex: return reduce(lambda acc, uv: acc + uv[0] * uv[1].conjugate(), zip(c1, c2), 0j)
方式3:itertools.starmap + sum
用starmap将zip生成的元素对作为参数传入计算lambda,再通过sum求和:
from itertools import starmap def inner_product_c(c1: Iterable[complex], c2: Iterable[complex]) -> complex: return sum(starmap(lambda u, v: u * v.conjugate(), zip(c1, c2)))
内容的提问来源于stack exchange,提问作者wajde
相关产品推荐
相关产品推荐

