2014-11-04 249 views
1

如果我在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

'reshape(z,4,x)'看起来像你想要的,不是? – StefanKarpinski 2014-11-04 11:46:25

+0

@StefanKarpinski没有那会给[1,5]作为前两个数字没有[1,2] – ccsv 2014-11-04 11:52:19

回答

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)) 

这就是我认为你所期望的。

3

我觉得你所碰到的是NumPy stores in row-major orderJulia 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) 

你想知道如果有什么的转什么numpy的会做假设数组是二维的,将计算第二维度?从来没听说过。可能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 
+0

所以,如果我使用的一个python库在Python中有'reshape',我想它将很难切换到茱莉亚没有使用Arrayview?似乎应该有一个内置的线性代数方法。 – ccsv 2014-11-04 14:47:51