Python-查找两个复杂坐标的平均值

时间:2019-06-18 12:58:55

标签: python-3.x sympy centroid

给出坐标集,如何找到相同的平均值?

ip = [[100.0 - 11.3*I, 82.8], [100.0 + 11.3*I, 82.8]]

最终结果应该是复数的情况,

op = ((100.0 - 11.3*I + 100.0 + 11.3*I)/2 , (82.8 + 82.8)/2))
op = (100, 82.8)

2 个答案:

答案 0 :(得分:1)

首先,要创建复数值,请使用jJ作为虚数单位(与大多数数学书中的i相反)并将其放在数字值的后面,没有*运算符:

>>> z = 3 + 4j
>>> z
(3+4j)

然后您可以对其执行常规的数学运算:

>>> abs(z)
5.0
>>> z**2
(-7+24j)

以及仅从cmath module in the standard library为复数定义的数字。

对于您输入的两个复数值2d向量,正确的语法应为:

ip = [[100.0 - 11.3j, 82.8], [100.0 + 11.3j, 82.8]]

您可以直接为该列表建立索引,以获取各个组件并添加它们:

>>> (ip[0][0] + ip[1][0])/2
(100+0j)

计算平均值的更简单方法是使用numpy math library中的数组函数.mean

>>> import numpy
>>> ip = numpy.array(ip)
>>> ip.mean(axis=0)
array([100. +0.j,  82.8+0.j])

答案 1 :(得分:0)

在SymPy中,可以使用矩阵紧凑地编写矢量运算:

>>> ip = [[100.0 - 11.3*I, 82.8], [100.0 + 11.3*I, 82.8]]
>>> a,b=map(Matrix, ip)
>>> (a+b)/2
Matrix([
[100.0],
[ 82.8]])
>>> list(_)
[100.0, 82.8]