for-loop - 用 for 循环替换值

标签 for-loop julia

假设我有以下功能:

function y1(x)
    y = x^(2) - 4
    return y
end

现在,我想评估此序列中的所有值:collect(range(-10,10, 1000))

我试过了

y_1 = zeros(1000);
for x in collect(range(-10, 10, 1000))
   y_1 = y1.(x)
end

请注意,我使用广播运算符将函数 y1 应用于采用迭代器的每个值。但如果我不使用它,我会得到相同的结果。

但作为答案,我只得到 96.0。

如何使用 for 循环重新填充 y_1 向量,以便获得评估值?

评估向量的大小应为 1000

提前致谢!

编辑:

我找到了一种无需 for 循环即可获得所需结果的方法:

y_1 = y1.(collect(range(-10, 10, 1000)))

但我仍然想知道如何在循环中做到这一点。

最佳答案

广播运算符在整个迭代器上广播函数本身,即y1.(arr)

  • 对数组的每个元素调用 y1 arr
  • 收集所有这些调用的结果,并且
  • 分配内存将这些结果也存储为数组

因此以下内容在功能方面都是等效的:

julia> arr = range(-4, 5, length = 10) #define a simple range
-4.0:1.0:5.0

julia> y1.(arr)
10-element Vector{Float64}:
 12.0
  5.0
  0.0
 -3.0
 -4.0
 -3.0
  0.0
  5.0
 12.0
 21.0

julia> [y1(x) for x in arr]
10-element Vector{Float64}:
(same values as above)

julia> map(y1, arr)
10-element Vector{Float64}:
(same values as above)

julia> y_1 = zeros(10);

julia> for (i, x) in pairs(arr)
          y_1[i] = y1(x)
       end

julia> y_1
10-element Vector{Float64}:
(same values as above)

实际上,可能还有其他考虑因素(包括性能)来决定这些选择和其他选择。


顺便说一句,请注意,很多时候您不想想要在 Julia 中收集某个范围,即不考虑收集在某种程度上相当于 R 中的 c()。对于许多操作,可以直接使用范围,包括 for 循环中的 for 迭代。 collect 仅在需要实际 Vector 的极少数情况下才需要,例如。由于某种原因需要更改数组中间的值。作为一般规则,请按原样使用范围结果,直到且除非您收到需要更改它的错误。

关于for-loop - 用 for 循环替换值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73757335/

相关文章:

javascript - 返回数组中偶数的总和

arrays - 用数组填充数组不能按我预期的那样工作

asynchronous - 无法看到在julia @spawn方法内发生的错误

list-comprehension - Julia 中的嵌套数组理解

Python 101 和数学逻辑 - 列出小于 n 的平方根数

C++忽略数组中的相同数字

dataframe - 参数错误: columns argument must be a vector of AbstractVector objects

vector - Julia - 相当于 R 的 rep() 与 times 参数

bash - md5 目录树中的所有文件

c++ - 将数组的所有元素初始化为相同的数字