在Julia中,转置运算符
我试图在向量上使用转置运算符来执行am元素加法。 例如,我想将列向量在Julia中,转置运算符,julia,transpose,Julia,Transpose,我试图在向量上使用转置运算符来执行am元素加法。 例如,我想将列向量a=[a1;a2;a3]添加到行向量b=[b1,b2]我应该得到矩阵 M=a+b=[a1+b1,a1+b2;a2+b1,a2+b2;a3+b1,a3+b2]。 在MATLAB中,它是等效的(如果两个向量都是行向量)M=a.+b 我试图在Julia中得到同样的结果,但问题是,从1.0版本开始,Julia中没有“操作符。存在在广播模式下不工作的转置运算符。伴随运算符对我无效,因为我处理复数 a = Vector{ComplexF64
a=[a1;a2;a3]
添加到行向量b=[b1,b2]
我应该得到矩阵
M=a+b=[a1+b1,a1+b2;a2+b1,a2+b2;a3+b1,a3+b2]
。
在MATLAB中,它是等效的(如果两个向量都是行向量)M=a.+b
我试图在Julia中得到同样的结果,但问题是,从1.0版本开始,Julia中没有“
操作符。存在在广播模式下不工作的转置运算符。伴随运算符对我无效,因为我处理复数
a = Vector{ComplexF64}([1+3im,2])
b = Vector{ComplexF64}([0,0,0])
Z = zeros(ComplexF64,3,2)
G = zeros(ComplexF64,3,2)
@. Z = b + a' # Works but takes the complex conjugate
@. Z = b + transpose(a) # DOES NOT WORK!!!! The error is " DimensionMismatch("array could not be broadcast to match destination") "
Z = b .+ transpose(a) # Works but not efficient
@. Z = b + conj(a')
第三种情况Z=b.+transpose(a)
是无效的,因为它使两个循环第一个循环用于加法b.+transpose(a)
,而第二个循环用于将b.+transpose(a)
赋值给Z
。而其他3个案例在一个循环内完成。
那么哪条路最快?
为什么转置在广播中不起作用
提前谢谢您只需键入:
a' .+ b
范例
julia> a = ComplexF64.([1+3im,2])
2-element Array{Complex{Float64},1}:
1.0 + 3.0im
2.0 + 0.0im
julia> b = ComplexF64.([10,20,30])
3-element Array{Complex{Float64},1}:
10.0 + 0.0im
20.0 + 0.0im
30.0 + 0.0im
julia> a' .+ b
3×2 Array{Complex{Float64},2}:
11.0-3.0im 12.0+0.0im
21.0-3.0im 22.0+0.0im
31.0-3.0im 32.0+0.0im
我知道你担心这里会有一个表现惩罚。
然而,在Julia中,与Matlab相反,转置
不会具体化数据。
它只是为数据的引用提供了不同的索引。这并不能阻止采用复杂共轭。。。