Julia - 数组中值的乘法

Jul*_*en 2 arrays broadcasting julia elementwise-operations

如果我有一个带有随机值的数组A,我想为每个长度为A的i定义一个数组B. B[i] = (A[i])²

首先,我尝试了以下代码:

using Distributions

A = rand(Uniform(1,10),1,20)

B = A

for i in 1:20
       B[i] = (A[i])^2
end
Run Code Online (Sandbox Code Playgroud)

在这些操作之后,我有A = B.

A
1×20 Array{Float64,2}:
 26.0478  5.36654  99.675  23.18  …  1.54846  91.3444  9.41496  2.91666

B
1×20 Array{Float64,2}:
 26.0478  5.36654  99.675  23.18  …  1.54846  91.3444  9.41496  2.91666
Run Code Online (Sandbox Code Playgroud)

所以我尝试了另一种方法:

B = A^2
Run Code Online (Sandbox Code Playgroud)

有以下错误:

ERROR: DimensionMismatch("A has dimensions (1,20) but B has dimensions (1,20)")
Run Code Online (Sandbox Code Playgroud)

例如,如果我这样做,B = 2*A它可以正常工作......

一些想法有所帮助?

谢谢

nic*_*y12 5

我认为这里最简单的解决方案是使用广播..

julia> A = rand(Uniform(1,10),1,20)
1×20 Array{Float64,2}:
 8.84251  1.90331  8.5116  2.50216  …  1.67195  9.68628  4.05879  1.50231

julia> B = A .^ 2
1×20 Array{Float64,2}:
 78.19  3.62257  72.4473  6.26081  …  2.7954  93.8241  16.4738  2.25693
Run Code Online (Sandbox Code Playgroud)

这可以满足您的期望:

julia> A
1×20 Array{Float64,2}:
 8.84251  1.90331  8.5116  2.50216  …  1.67195  9.68628  4.05879  1.50231

julia> B
1×20 Array{Float64,2}:
 78.19  3.62257  72.4473  6.26081  …  2.7954  93.8241  16.4738  2.25693
Run Code Online (Sandbox Code Playgroud)

.运算符适用于任何函数及其执行的操作,它将所有函数广播(应用)到数组/对象的每个元素.

这是一个自定义函数的示例:

julia> my_func(a) = a * 5
my_func (generic function with 1 method)

julia> my_func.(1:5)
5-element Array{Int64,1}:
  5
 10
 15
 20
 25
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看文档.