2012-09-18 110 views
1

我所擁有的是:合併ND陣列成一個陣列,並列出

x = array([a, a, a, a, a, a], 
      [b, b, b, b, b, b], 
      [................], 
      [z,z,z,z,z,z,z,z,]) 

我要尋找一個約方式:

我。如何將這個數組轉換爲一維數組x = array [a,a,a,a,a,a,a,b,b,b,b,b,..,z,z,z]和a 1D列表x = [a,a,a,a,a,a,a,b,b,b,b,b,...,z,z,z]。

ii。計算這個數組的確切尺寸:我試着len(x [0])和len(x)來獲得這兩個三維座標,但是這種方式似乎有點冒失。有沒有內置的函數來獲取數組的維度?

注意:一些數組值是正整數,其中一些是浮點數,其中一些是負浮點數,其中一些是負整數。

非常感謝提前。

回答

2

我用np.ravel這項任務。
只要調用列表構造函數,如果這就是你想要的輸出。
.shape將分別給出行數和列數,但實際上並不需要知道它們。

>>> import numpy as np 
>>> a = np.random.random_integers(0, 9, (3, 4)) 
>>> a.shape 
(3, 4) 
>>> print a 
[[9 5 1 8] 
[3 1 3 1] 
[3 9 6 6]] 
>>> a.ravel() 
array([9, 5, 1, 8, 3, 1, 3, 1, 3, 9, 6, 6]) 
>>> list(a.ravel()) 
[9, 5, 1, 8, 3, 1, 3, 1, 3, 9, 6, 6] 
+0

This works works!fine。我所要做的就是對這些文件進行一些修改並應用np.ravel()。我完成了。感謝一百萬。:-) – khan

+0

還有'.flat' ,這只是一個迭代器,但足以達到這個目的。好處是'.ravel()'可能需要創建一個數據副本。我相信這對你無關緊要,但它可以是一個很好的功能。 – seberg

0

合併數組到一個新的數組:

newArray = array() 
for y in x 
    newArray += y 

發現長度:

len(newArray) 
+0

要創建一維數組,使用'ndarray.flatten()' – Vorticity

+0

gabitzish和Vorticity:這兩種方法都不起作用。我想獲得一個像數組[a,a,a,a,... z,z,z,z]的單個數組,其中沒有任何對象或元組。只是一個序列化的列表。它沒有發生在你們指定的方法上。 – khan

1

要創建一個ND數組一維數組,使用ndarray.flatten()

x = array([a, a, a, a, a, a], 
     [b, b, b, b, b, b], 
     [................], 
     [z,z,z,z,z,z,z,z,]) 
x.flatten() 

要獲得從此列表中,使用ndarray.tolist()

xlist = x.tolist() 

要得到一個數組的大小,使用ndarray.shape

print x.shape 
(4, 6) 
+0

for 1D list,you might want'x.flatten()。tolist()' –

+0

與flatten一起工作只需將每個元組分配到一個數組中。我需要像x = [a,a,a,... z,z,z,z]這樣的單個數組,其中列出了從多維數組到序列化格式的所有內容。 :-( – khan

1
  • 要變換2D陣列作爲一維數組,可以用np.ravel(a)。如果你想這樣做,你也可以使用a.shape=-1a.flatten方法將返回初始數組的副本,這是浪費。
  • 要將一維數組轉換爲列表,可以使用list(a)a.tolist()。爲了將2D數組轉換爲平面列表,最簡單的方法是list(a.flat).flat返回一個「平坦」迭代器)。請注意,在二維陣列上使用a.tolist會給出列表的列表,而使用list(a)會給出一個陣列列表。
  • 使用a.shape可以獲得沿着每個維度的a的大小,作爲元素與維數一樣多的元組。請注意,len(a)==a.shape[0]。用你的2D陣列,len(a[0])=a.shape[1]