가능한 한 처음부터 원하는 열 수를 사용하여 Array를 만드는 것이 가장 좋습니다. 그렇게하면 해당 열 값을 채울 수 있습니다. hcat()
과 같은 절차를 사용하는 솔루션은 매번 Array를 다시 생성해야하므로 비효율적입니다.
이미 존재하는 Array에 열을 추가해야하는 경우 hcat()
루프가 아닌 모든 열을 한꺼번에 추가 할 수있는 것이 좋습니다. 예 : 당신이 시작하는 경우 :
for idx = 1:3
A = hcat(A, rand(n))
end
일예 :
n = 10; m = 5;
A = rand(n,m);
다음
A = [A rand(n, 3)]
더 빠르고 메모리 효율적인 이상의 것 이 둘 사이의 속도와 메모리 할당의 차이를 비교해보십시오.
n = 10^5; m = 10;
A = rand(n,m);
n_newcol = 10;
function t1(A::Array, n_newcol)
n = size(A,1)
for idx = 1:n_newcol
A = hcat(A, zeros(n))
end
return A
end
function t2(A::Array, n_newcol)
n = size(A,1)
[A zeros(n, n_newcol)]
end
# Stats after running each function once to compile
@time r1 = t1(A, n_newcol); ## 0.145138 seconds (124 allocations: 125.888 MB, 70.58% gc time)
@time r2 = t2(A, n_newcol); ## 0.011566 seconds (9 allocations: 22.889 MB, 39.08% gc time)
코드가 좋지만 어떻게 4 열을 추가 할 수 있습니까? 내가 필요한 열의 수를 모를 경우 어떻게 구현해야합니까? 감사합니다 – kaslusimoes
Hrm ... 이것이 1d 배열이라면 당신은 밀 수 있습니다! 그리고 팝! 하지만 그 매크로는 2 차원 어레이에서 작동하지 않는 것 같습니다. –
Julia에서 둘 이상의 차원이있는 배열에 행을 추가 할 수 없습니다. 해결책은 행을 벡터로 저장 한 다음'vcat' 또는'hcat'을 사용하여 행렬을 만드는 것입니다. – ivarne