julia - 错误:MethodError:没有方法匹配 abs(::Array{Complex{Float64},1})
问题描述
假设我们有这个功能:
function prob(na)
@assert count(!iszero, ui2*na) == 0
b = T0*na
setc(-b)
total = 0.0
for x in Channel(scan)
nab = vi2*x + b
total += prod([c.^complex(n)/factorial(n) for (c, n) in zip(coef, nab)])
end
return abs(total*omega)^2
end
让我们尝试忽略这个函数中的一些变量,因为问题与它们无关,我在这里面临的问题是当我调用这个函数时,顺便说一句,这是一个实习函数,我收到以下错误:
ERROR: MethodError: no method matching abs(::Array{Complex{Float64},1})
Closest candidates are:
abs(::Bool) at bool.jl:83
abs(::Float16) at float.jl:520
abs(::Float32) at float.jl:521
...
现在我知道错误在最后一部分abs(total*omega)^2
,coef
并且nab
系数类型Int
omega
也是Int
,如果我在一个简单的情况下尝试相同的操作它会起作用,但在这里我不知道为什么!
解决方案
total
似乎是一个Vector
复数,并且omega
可能是一些标量。.
因此,如果您使用 do ( ) 运算符对操作进行矢量化,可能就足够了。看看下面的代码:
julia> cnums = Complex.([2,2,3],[2,7,6])
3-element Array{Complex{Int64},1}:
2 + 2im
2 + 7im
3 + 6im
julia> abs.(cnums .* 1).^2
3-element Array{Float64,1}:
8.000000000000002
53.0
45.00000000000001
或者,@DNF 更好地建议:
julia> abs2.(cnums .* 1)
3-element Array{Int64,1}:
8
53
45
推荐阅读
- github - 我可以在 git 跟踪之外在 GitHub 上维护一个二进制文件吗?
- signalr - RSocket 控制器向 IIS 托管的 signalR 客户端发送 Reactor Flux 消息,但没有收到任何内容
- php - PHP/Curl:如何显示来自外部 API 的图像?
- sharepoint - SharePoint Workflow Manager 中的 SharePoint 2019 安装问题
- api - 如何从 Google Photos 搜索 API 获得排序结果?
- python - Python Pika 中的非阻塞 RabbitMQ 消费者
- python - 在Python中列出不带逗号的csv
- java - 尝试为两个数字的最大公因数编写程序。但是输出显示的是初始化值 1
- c - 将旋转图像写入 jpeg 文件的问题
- c# - VBA 插件对象模型的添加方法给出异常