首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Julia v1.1:创建矩阵数组

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

Stack Overflow用户
提问于 2019-08-28 20:27:35
回答 1查看 327关注 0票数 1

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

代码语言:javascript
运行
复制
A = t .* [1 ,0]

但这会产生错误ERROR: LoadError: DimensionMismatch("arrays could not be broadcast to a common size")。我希望将t的每个标量或元素与向量[1 , 0]的元素进行元素乘法(就t而言),本质上是执行元素的标量矩阵乘积。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-28 21:04:59

你必须将你不想被广播的元素包装在一个容器中。下面是一个标准的实现方法(为了让示例更清晰,我将length kwarg减少为3 ):

代码语言:javascript
运行
复制
julia> t = range(0,stop=2*pi,length=3)
0.0:3.141592653589793:6.283185307179586

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

julia> Ref([1 2; 3 4]) .* A
3-element Array{Array{Float64,1},1}:
 [0.0, 0.0]
 [3.141592653589793, 9.42477796076938]
 [6.283185307179586, 18.84955592153876]

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

代码语言:javascript
运行
复制
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维的,因此它是这三种方法中最中立的(即以最小的方式影响输出-保留其他参数的广播风格)。下面是一些示例:

代码语言:javascript
运行
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57692430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档