在Julia中,转置运算符

在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

我试图在向量上使用转置运算符来执行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}([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相反,
转置
不会具体化数据。
它只是为数据的引用提供了不同的索引。

这并不能阻止采用复杂共轭。。。