2014-11-04 192 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