我是从Matlab到python的新转换,我正在努力生成复杂的数组。
在matlab中我有以下代码:
xyAxis = linspace(-127,127,255);
[x,y] = meshgrid(xyAxis, xyAxis);
fz = -(x.^2 + y.^2);
ifz = sqrt(fz);
我想在python 3中复制:
import numpy as np
xyAxis = np.intp( np.linspace(-127, 127, 255) )
x, y = np.meshgrid(xyAxis,xyAxis)
fz = - (x**2 + y**2)
ifz = np.sqrt(fz)
但是,我收到以下错误:
RuntimeWarning: invalid value encountered in sqrt
我做了一些谷歌搜索,我不知道如何在这种情况下模仿matlab的行为?有什么建议吗?
答案 0 :(得分:4)
一种方法是将fz
投射到复杂的dtype
:
ifz = np.sqrt(fz.astype(np.complex))
答案 1 :(得分:1)
除了@PaulPanzer建议的另一种方式 -
import numpy as np
xyAxis = np.intp( np.linspace(-127, 127, 255) )
x, y = np.meshgrid(xyAxis,xyAxis)
fz = - (x**2 + y**2)
from numpy.lib.scimath import sqrt as csqrt
ifz = csqrt(fz)
print ifz
直接来自numpy docs
<强>输出强>
[[ 0.+179.60512242j 0.+178.89941308j 0.+178.19652073j ...,
0.+178.19652073j 0.+178.89941308j 0.+179.60512242j]
[ 0.+178.89941308j 0.+178.19090886j 0.+177.48521065j ...,
0.+177.48521065j 0.+178.19090886j 0.+178.89941308j]
[ 0.+178.19652073j 0.+177.48521065j 0.+176.7766953j ...,
0.+176.7766953j 0.+177.48521065j 0.+178.19652073j]
...,
[ 0.+178.19652073j 0.+177.48521065j 0.+176.7766953j ...,
0.+176.7766953j 0.+177.48521065j 0.+178.19652073j]
[ 0.+178.89941308j 0.+178.19090886j 0.+177.48521065j ...,
0.+177.48521065j 0.+178.19090886j 0.+178.89941308j]
[ 0.+179.60512242j 0.+178.89941308j 0.+178.19652073j ...,
0.+178.19652073j 0.+178.89941308j 0.+179.60512242j]]