假设我想将向量值函数phi应用于向量x:
phi(x, d) = [x.^i for i=0:d] # vector-valued function
x = rand(7) # vector
y = phi(x, 3) # should be matrix, but isn't
Run Code Online (Sandbox Code Playgroud)
现在y应该是一个矩阵,但它是4-element Array{Array{Float64,1},1}一个数组,即数组.实际上,我想y成为一个矩阵.执行phi错了吗?或者我该如何转换它?
谢谢!
Toi*_*son 13
正如你提到的,您可以连接数组的数组x使用hcat(x...),但它通常是最好创建一个矩阵来开始吧.在这种情况下,您可以采用两种方法:
使用广播:
phi(x, d) = x.^((0:d)')
Run Code Online (Sandbox Code Playgroud)
只要x是矢量,它就会针对行矩阵进行广播(0:d)'.
您可以通过转置x而不是范围来获得转置结果0:d.
使用二维数组理解:
phi(x, d) = [xi.^di for xi in x, di in 0:d]
Run Code Online (Sandbox Code Playgroud)
只要x可迭代,这将起作用.如果x是一个nd数组,它将被解释为首先被展平.
您可以通过切换理解变量的顺序来转置结果:
phi(x, d) = [xi.^di for di in 0:d, xi in x]
Run Code Online (Sandbox Code Playgroud)Dan*_*etz 12
将phi输出转换为矩阵可以按如下方式完成:
y = hcat(phi(x, 3)...)
Run Code Online (Sandbox Code Playgroud)
或者如果您希望向量为行,则需要转置:
y = vcat([x' for x in phi(x, 3)]...)
Run Code Online (Sandbox Code Playgroud)
或者,您可以phi通过定义矩阵转换为矩阵:
phi(x, d) = hcat([x.^i for i=0:d]...)
Run Code Online (Sandbox Code Playgroud)
小智 9
更一般地,您还可以将 splat 运算符...用于hcat:
X = [[1,2], [3, 4], [5,6]]
hcat(X...)
Run Code Online (Sandbox Code Playgroud)
给出一个 2×3 矩阵
1 3 5
2 4 6
Run Code Online (Sandbox Code Playgroud)
splatting 之类的替代方法hcat(X...)是使用reduce
reduce(hcat, X)
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下,这可以解决问题
reduce(hcat, phi(x, 3))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7237 次 |
| 最近记录: |