【发布时间】:2022-01-16 20:05:09
【问题描述】:
上下文
让我们考虑 5 x 5 晶格,每个点的索引为 (1,1),(1,2),...(1,5),(2,1),...,(5,5 ),并称这个格为L。
我想做什么
我想制作一个 5 x 5 矩阵,每个元素都有一个值,表示 L 的每个点,如下所示:
5×5 Matrix{Vector{Int64}}:
[1, 1] [1, 2] [1, 3] [1, 4] [1, 5]
[2, 1] [2, 2] [2, 3] [2, 4] [2, 5]
[3, 1] [3, 2] [3, 3] [3, 4] [3, 5]
[4, 1] [4, 2] [4, 3] [4, 4] [4, 5]
[5, 1] [5, 2] [5, 3] [5, 4] [5, 5]
我尝试了什么
我刚刚尝试了以下方法:
X1 = [1,2,3,4,5]
X2 = copy(X1)
Lattice = Matrix{Vector{Int64}}(undef, length(X1), length(X2)) # what I want to make
for x1 in X1
for x2 in X2
Lattice[x1,x2] = [X1[x1],X2[x2]]
end
end
Lattice
问题
- 还有其他方法可以使代码简单或简短吗?
- 如果增加像 50 x 50 这样的晶格尺寸,我担心性能会变差。还有更好的方法吗?
- 还有什么更好的做法?
任何信息将不胜感激。
【问题讨论】:
-
下面有一些不错的答案,其中
CartesianIndices是最快最轻量级的(它不会占用更多内存,不管你的格子有多大。)但是如果你想要针对的答案你的用例,你应该提供更多关于你想用它做什么的细节。
标签: arrays matrix multidimensional-array vector julia