如果我在python中重塑,我使用它:
import numpy as np
y= np.asarray([1,2,3,4,5,6,7,8])
x=2
z=y.reshape(-1, x)
print(z)
得到这个
>>>
[[1 2]
[3 4]
[5 6]
[7 8]]
我如何在朱莉娅得到同样的东西?我试过了:
z = [1,2,3,4,5,6,7,8]
x= 2
a=reshape(z,x,4)
println(a)
它给了我:
[1 3 5 7
2 4 6 8]
如果我使用reshape(z,4,x)
,则会提供
[1 5
2 6
3 7
4 8]
还有一种方法可以在不指定第二个维度(例如reshape(z,x)
)或者辅助维度更加模糊的情况下进行重新整形吗?
答案 0 :(得分:3)
我认为您所涉及的内容是NumPy stores in row-major order和Julia stores arrays in column major order,涵盖here。
所以如果你使用
,朱莉娅正在做的事情会发生什么z=y.reshape(-1,x,order='F')
你想要的是第一次尝试的转置,即
z = [1,2,3,4,5,6,7,8]
x= 2
a=reshape(z,x,4)'
println(a)
你想知道是否有东西会计算第二维,假设数组是二维的?从来没听说过。可能ArrayViews?这是一个简单的启动功能
julia> shape2d(x,shape...)=length(shape)!=1?reshape(x,shape...):reshape(x,shape[1],Int64(length(x)/shape[1]))
shape2d (generic function with 1 method)
julia> shape2d(z,x)'
4x2 Array{Int64,2}:
1 2
3 4
5 6
7 8
答案 1 :(得分:3)
怎么样
z = [1,2,3,4,5,6,7,8]
x = 2
a = reshape(z,x,4)'
给出了
julia> a = reshape(z,x,4)'
4x2 Array{Int64,2}:
1 2
3 4
5 6
7 8
关于你的奖金问题
“还有一种方法可以在不指定第二个的情况下进行重塑 尺寸像重塑(z,x)或次要维度更多 暧昧?“
答案并不完全正确,因为它含糊不清:reshape
可以制作3D,4D,...,张量因此不清楚预期的内容。但是,您可以执行类似
matrix_reshape(z,x) = reshape(z, x, div(length(z),x))
这就是我所期待的。
答案 2 :(得分:0)
“还有一种方法可以不指定第二维(例如reshape(z,x)),或者如果第二维更不明确,就可以进行整形?”
使用:
代替-1
我正在使用Julia 1.1(不确定最初回答时是否有功能)
julia> z = [1,2,3,4,5,6,7,8]; a = reshape(z,:,2)
4×2 Array{Int64,2}:
1 5
2 6
3 7
4 8
但是,如果您希望第一行是1 2
并与Python匹配,则需要遵循另一个答案,提到行优先与列优先的顺序,然后执行
julia> z = [1,2,3,4,5,6,7,8]; a = reshape(z,2,:)'
4×2 LinearAlgebra.Adjoint{Int64,Array{Int64,2}}:
1 2
3 4
5 6
7 8