如何在Julia中使for循环在一定次数的迭代后停止



我在编程方面还是个新手,如果有任何关于如何解决以下问题的帮助,我将不胜感激:

给定一个矩阵(3x5)

a = [1 2 3 4 5; 
6 7 8 9 10; 
11 12 13 14 15;]
  1. 我想遍历每一行
  2. 对于每一行,我希望每个元素都被选中
  3. 对于每个元素,我想要存储一个单独的数组来保存该元素和下两个元素。

,

Row 1 = [1 2 3 4 5]
For element 1
return newArray = [1 2 3]
For element 2
return newArray = [2 3 4]

卡住在第3部分。如何使for循环检查只到下两个元素,然后继续到该行中的下一个元素。

我尝试解决了您所要求的问题,但我同意其他人的意见,您需要更多地考虑您正在尝试做什么以及您希望输出的内容。你的请求听起来不像是初学者会实际使用的东西。我不确定你想要什么形状来存储你的"单独的数组"。我可以在下面选择将它们保持在矢量中或保持a的原始形状。

function nexttwo(row, i)
newarray::Vector{Any} = [row[i]]
for j=1:2
i+=1
if length(row) >= i
push!(newarray, row[i])
else
push!(newarray, nothing)
end
end
return newarray
end    
function collectnexttwo(a)
result_collection = []
for i in axes(a,1)
for j in axes(a,2)
row = a[i,:]
newarray = nexttwo(row, j)
push!(result_collection, newarray)
end
end
return result_collection
end
function restoreshape(v, a)
permutedims(reshape(v, reverse(size(a))))
end
julia> a = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15;]
3×5 Matrix{Int64}:
1   2   3   4   5
6   7   8   9  10
11  12  13  14  15
julia> result = restoreshape(collectnexttwo(a), a)
3×5 Matrix{Any}:
Any[1, 2, 3]     Any[2, 3, 4]     Any[3, 4, 5]     Any[4, 5, nothing]    Any[5, nothing, nothing]
Any[6, 7, 8]     Any[7, 8, 9]     Any[8, 9, 10]    Any[9, 10, nothing]   Any[10, nothing, nothing]
Any[11, 12, 13]  Any[12, 13, 14]  Any[13, 14, 15]  Any[14, 15, nothing]  Any[15, nothing, nothing]

我认为你有一些问题的声明你想实现什么。这通常会使编程任务变得更加困难。

重复你已经拥有的东西:

  1. 我想遍历每一行

这很简单

for row = 1:size(a)[1]
...
end
  1. 对于每一行,我希望每个元素都被选中

这就是事情开始变得黏糊糊的地方?你说的"检查"是什么意思?让我们假设你有一个叫做checkElement的函数。

  1. 对于每个元素,我想存储一个单独的数组来保存该元素和接下来的2个元素。

你想让这个单独的数组存在多长时间?你只想保存3个元素吗?或者为每个原始单元格提供三个元素(例如,为3x5的输入提供3x5x3的结果,如您所示)

另外,您想对每行中的元素4和5做什么?您希望为它们的"next"使用哪些值?元素?您可以使用missing作为值或NaN。或者您可以使结果不包含有问题的输入。

如果你回答了这些问题,你可能会发现编写你需要的代码要容易得多。

最新更新