我想通过重复长度为 n 次的较小列向量 G 来创建列向量 X 。最终向量 X 的长度为 h*n。例如
G = [1;2;3;4] #column vector of length h
X = [1;2;3;4;1;2;3;4;1;2;3;4] #ie X = [G;G;G;G] column vector of
length h*n
Run Code Online (Sandbox Code Playgroud)
我可以在循环中执行此操作,但是否有等效于“填充”功能的功能,可以在尺寸不出错的情况下使用。当我尝试在这种情况下使用填充时,我得到的不是长度为 h*n 的列向量,而是长度为 n 的列向量,其中每一行是另一个长度为 h 的向量。例如,我得到以下信息:
X = [[1,2,3,4];[1,2,3,4];[1,2,3,4];[1,2,3,4]]
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义,因为我知道 ; 符号用于显示行中的元素,空格用于显示列中的元素。为什么这里使用 , 符号,它甚至是什么意思?例如,我可以通过 X[1] 访问最终输出 X 的第一行,然后通过 X[1][1] 访问其中的任何元素。
我想使用一些“填充”等效项或某种“展平”功能(如果存在),将 X 的所有元素展平为一个列向量,每个条目都是一个数字。
我也尝试了输出的重塑功能,但我也无法让它工作。
感谢 Dan Getz 的回答:
repeat([1, 2, 3, 4], outer = 4)
Run Code Online (Sandbox Code Playgroud)
?repeat在 REPL 中键入以了解这个有用的功能。
在旧版本的 Julia 中,repmat是一种替代方案,但现在已被弃用并被吸收到repeat
正如@DanGetz 在评论中指出的那样,repeat是您想要的功能。从文档:
Run Code Online (Sandbox Code Playgroud)repeat(A, inner = Int[], outer = Int[])通过重复 的条目构造一个数组
A。的第 i 个元素inner指定第 i 个维度的各个条目A应重复的次数。的第 i 个元素outer指定沿第 i 个维度的切片A应重复的次数。
因此,可以执行您想要的操作的示例是:
X = repeat(G; outer=[k])
Run Code Online (Sandbox Code Playgroud)
whereG是要重复的数组,是重复k的次数。
我还将尝试回答您对fill. Julia(像大多数语言一样)区分包含数字的向量和数字本身。我们知道fill(5, 5)产生[5, 5, 5, 5, 5],它是一个一维数组(一个向量),其中每个元素都是5。
fill([5], 5)但是请注意, 会生成一个一维数组(向量),其中每个元素是[5],本身就是一个向量。这打印为
5-element Array{Array{Int64,1},1}:
[5]
[5]
[5]
[5]
[5]
Run Code Online (Sandbox Code Playgroud)
我们从类型中看到这确实是一个向量的向量。这当然与向量的串联不同。请注意,这[[5]; [5]; [5]; [5]; [5]]是连接的语法,并且会[5, 5, 5, 5, 5]如您所愿地返回。但是虽然;语法 ( vcat) 会进行串联,fill但不会进行串联。
在数学上(在某些定义下),我们可以想象 R^(kn) 与 (R^k)^n 不同(尽管同构),例如,其中 R^k 是实数的 k 元组的集合。fill构造后者的对象,而repeat构造前者的对象。