Matrix Julia v1.1:创建矩阵数组

Matrix Julia v1.1:创建矩阵数组,matrix,julia,matrix-multiplication,scalar,Matrix,Julia,Matrix Multiplication,Scalar,我试图通过将t=range(0,stop=2*pi,length=101)乘以矩阵[1,0]来创建一个矩阵数组,如下所示 A = t .* [1 ,0] 但这会产生错误error:LoadError:dimensionsmatch(“数组无法广播到公共大小”)。我希望将每个标量或t的元素(就t而言)与向量[1,0]的元素相乘,基本上执行元素标量——矩阵积 我这样做的原因是因为我希望以后能够将另一个常量矩阵m与A中的每个列向量相乘。在Julia v1.1中如何做到这一点?您必须将不希望广播的元素

我试图通过将
t=range(0,stop=2*pi,length=101)乘以矩阵
[1,0]
来创建一个矩阵数组,如下所示

A = t .* [1 ,0]
但这会产生错误
error:LoadError:dimensionsmatch(“数组无法广播到公共大小”)
。我希望将每个标量或
t
的元素(就
t
而言)与向量
[1,0]
的元素相乘,基本上执行元素标量——矩阵积


我这样做的原因是因为我希望以后能够将另一个常量矩阵
m
A
中的每个列向量相乘。在Julia v1.1中如何做到这一点?

您必须将不希望广播的元素包装在容器中。下面是一个标准方法(我将
length
kwarg减少到
3
,以使示例更加清晰):

除了
Ref
容器,还可以使用1元素元组或1元素向量作为包装器:

julia> t .* ([1 ,0],)
3-element Array{Array{Float64,1},1}:
 [0.0, 0.0]
 [3.141592653589793, 0.0]
 [6.283185307179586, 0.0]

julia> t .* [[1 ,0]]
3-element Array{Array{Float64,1},1}:
 [0.0, 0.0]
 [3.141592653589793, 0.0]
 [6.283185307179586, 0.0]
首选
Ref
的原因是它是0维的,因此它是这三种方法中最中性的(即以最小的方式影响输出-保留其他参数的广播样式)。以下是一些例子:

julia> f1(x) = x .* (2, )
f1 (generic function with 1 method)

julia> f2(x) = x .* [2]
f2 (generic function with 1 method)

julia> f3(x) = x .* Ref(2)
f3 (generic function with 1 method)

julia> f1(1)
(2,)

julia> f2(1)
1-element Array{Int64,1}:
 2

julia> f3(1)
2

julia> f1((1,2))
(2, 4)

julia> f2((1,2))
2-element Array{Int64,1}:
 2
 4

julia> f3((1,2))
(2, 4)

[1,0]
不是矩阵,而是向量,因此您试图将两个不同长度的向量相乘,但这行不通。如果你想要一个矩阵,写
[10]
时不要用逗号。但是,乘法的输出将只是一个矩阵,而不是一个矩阵数组。我想这个问题问的是我在回答中讨论的内容(虽然我不是100%确定)@SeSodesa-仅供参考:矩阵在Julia术语中始终是二维数组。一维数组被称为向量,这就是我想要的。现在我遇到了一个问题,结果数组包含一组一维数组,矩阵
M
我试图将它们与if a
2x2
矩阵相乘,因此我再次面临维度不匹配的问题。请参见上面的示例。我已经教过你怎么做了。将
[1 2;3 4]
替换为
M
,您将得到您想要的。我假设你想做矩阵乘法(不是广播乘法)——对吗?我想做广播矩阵乘法。因此本质上
A
应该包含
2x1
列向量,并且每个向量都应该(在矩阵意义上)与
M
相乘。结果应该是矩阵乘法结果的向量,长度等于
a
。如果您想要广播乘法,请执行
[M.*v代表a中的v]
广播。(*,Ref(M),a)
。总的来说,请试着准确地问最初的问题(我知道有时很难:),然后以你期望的方式回答它们会更容易。如果你想要标准乘法-按照我上面的建议做
Ref(M)。*A
julia> f1(x) = x .* (2, )
f1 (generic function with 1 method)

julia> f2(x) = x .* [2]
f2 (generic function with 1 method)

julia> f3(x) = x .* Ref(2)
f3 (generic function with 1 method)

julia> f1(1)
(2,)

julia> f2(1)
1-element Array{Int64,1}:
 2

julia> f3(1)
2

julia> f1((1,2))
(2, 4)

julia> f2((1,2))
2-element Array{Int64,1}:
 2
 4

julia> f3((1,2))
(2, 4)