numpy.minimum为复数

时间:2018-09-24 14:18:27

标签: python numpy complex-numbers

numpy.minimum似乎不适用于复数:

np.minimum(5+3*1j,4+30*1j)
(4+30j)

我想保持最大幅度的值。 它仅比较实部。还有其他用于元素最小比较的功能吗? MATLAB min确实可以处理复数。 谢谢

3 个答案:

答案 0 :(得分:3)

如果要按幅度比较复数,可以使用内置的abs然后比较结果:

>>> np.minimum(abs(5+3*1j),abs(4+30*1j))
5.830951894845301

要获得最小的初始数字而不是其大小,请使用argmin

>>> nums = [5+3*1j, 4+30*1j]
...
>>> nums[np.abs(nums).argmin()]
(5+3j)

答案 1 :(得分:2)

您可以做到

X = np.array([3+4j, 10+5j, 1+1j])
min_X = min(X, key=np.abs)
print(min_X)
Out: (1+1j)

答案 2 :(得分:1)

您可以使用np.wherenp.abs

假设你有

vals1 = [4+30*1j, 7+3*1j, 4+30*1j]
vals2 = [5+3*1j, 6+3*1j, 5+3*1j]

然后

>>> np.where(np.abs(vals1) > np.abs(vals2), vals2, vals1)
array([5.+3.j, 6.+3.j, 5.+3.j])