gpt4 book ai didi

julia - 在 Julia 中向 DataArray 添加列

转载 作者:行者123 更新时间:2023-12-01 01:57:28 25 4
gpt4 key购买 nike

关注 How to add vectors to the columns of some array in Julia? ,我想对 DataArrays 进行一些类似的说明。

y=randn(100, 2) .我想创建一个矩阵 x滞后值(与 lags > 0 )为 y .我已经写了一个看起来工作正常的代码(见下文)。我想知道是否有比我使用的更好的连接 DataArray 的方法。

  T, n = size(y);
x = @data(zeros(T-lags, 0));

for lag in 1:lags
x = hcat(x, y[lags-lag+1:end-lag, :]);
end

最佳答案

除非有特殊原因,否则我的建议是从您的 DataArray 开始。 x是你想要的大小,然后填写你想要的列值。

与需要重新创建 DataArray 相比,这将为您提供更好的性能。对于每个新列,“添加”列的任何方法实际上都会这样做。可以想象, DataArray 包的语法可能比您在问题中的语法更漂亮,但从根本上说,它仍然会这样做。

因此,在您示例的简化版本中,我建议:

using DataArrays
N = 5; T = 10;
X = @data(zeros(T, N));
initial_data_cols = 2; ## specify how much of the initial data is filled in
lags = size(X,2) - initial_data_cols
X[:,1:initial_data_cols] = rand(size(X,1), initial_data_cols) ## First two columns of X are fixed in advance


for lag in 1:lags
X[:,(lag+initial_data_cols)] = rand(size(X,1))
end

如果您确实发现自己需要向已创建的对象添加列,则可以通过首先将所有新对象创建在一起,然后将它们添加到初始对象中,对现有代码进行一些改进数据数组。例如。
X = @data(zeros(10, 2))
X = [X rand(10,3)]

例如,考虑以下两个示例中执行时间、内存分配数量和数量的差异:
n = 10^5; m = 10;
A = @data 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.154082 seconds (124 allocations: 125.888 MB, 75.33% gc time)
@time r2 = t2(A, n_newcol); ## 0.007981 seconds (9 allocations: 22.889 MB, 31.73% gc time)

关于julia - 在 Julia 中向 DataArray 添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39335182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com