2017-07-02 63 views
1

我想創建一個雙維數組。將連續行附加到Python數據框中

我嘗試這樣做:

import numpy as np 

result = np.empty 
np.append(result, [1, 2, 3]) 
np.append(result, [4, 5, 9]) 

1.陣列的尺寸是:(2, 3)。我怎樣才能得到它們?

我想:

print(np.shape(result)) 
print(np.size(result)) 

但這打印:

() 
1 

2.How我可以在陣列中訪問特定的元素?

我嘗試這樣做:

print(result.item((1, 2))) 

但這返回:

Traceback (most recent call last): 
    File "python", line 10, in <module> 
AttributeError: 'builtin_function_or_method' object has no attribute 'item' 

回答

1

這並不完全使用numpy陣列的方式。 empty是一個功能。例如,append會返回新數組,但您忽略了返回值。

要創建2-d陣列,使用此:

In [3]: result = np.array([[1, 2, 3], [4, 5, 9]]) 

要找到它的形狀:

In [4]: result.shape 
Out[4]: (2, 3) 

要訪問一個特定的元素:

In [5]: result[1][2] 
Out[5]: 9 
3

理想情況下,你應該在交互式會話中測試這類代碼,您可以輕鬆獲取有關步驟的更多信息。我將在ipython中舉例說明。

In [1]: result = np.empty 
In [2]: result 
Out[2]: <function numpy.core.multiarray.empty> 

這是一個函數,而不是一個數組。正確的使用是result = np.empty((3,))。那就是你必須調用具有所需大小參數的函數。

In [3]: np.append(result, [1,2,3]) 
Out[3]: array([<built-in function empty>, 1, 2, 3], dtype=object) 

append創建了一個數組,但看看內容 - 函數和3個數字。和dtype。還有np.append會返回結果。它不適用。

In [4]: result.item((1,2)) 
--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-4-51f2b4be4f43> in <module>() 
----> 1 result.item((1,2)) 

AttributeError: 'builtin_function_or_method' object has no attribute 'item' 

您的錯誤告訴我們result是一個函數,而不是一個數組。你在開始時設定的是同樣的事情。

In [5]: np.shape(result) 
Out[5]:() 
In [6]: np.array(result) 
Out[6]: array(<built-in function empty>, dtype=object) 

在這種情況下np.shapenp.size功能版本不診斷,因爲它們先轉換成result陣列。 result.shape會發生錯誤。

根本的問題是,您使用的是列表模型

result = [] 
result.append([1,2,3]) 
result.append([4,5,6]) 

但陣列append被錯誤命名,並濫用。這只是np.concatenate的前端。如果你不明白concatenate,你可能不會使用np.append的權利。事實上,我認爲你根本不應該使用np.append


使用追加正確的方法是使用具有大小爲0維數組開始,並重復使用結果:

In [7]: result = np.empty((0,3),int) 
In [8]: result 
Out[8]: array([], shape=(0, 3), dtype=int32) 
In [9]: result = np.append(result,[1,2,3]) 
In [10]: result 
Out[10]: array([1, 2, 3]) 
In [11]: result = np.append(result,[4,5,6]) 
In [12]: result 
Out[12]: array([1, 2, 3, 4, 5, 6]) 

但也許不是你想要的?即使我誤用了append

回到繪圖板:

In [15]: result = [] 
In [16]: result.append([1,2,3]) 
In [17]: result.append([4,5,6]) 
In [18]: result 
Out[18]: [[1, 2, 3], [4, 5, 6]] 
In [19]: result = np.array(result) 
In [20]: result 
Out[20]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 

有了一個真正的數組,你item表達的作品,雖然平時我們使用[]索引:

In [21]: result[1,2] 
Out[21]: 6 
In [22]: result.item((1,2)) 
Out[22]: 6 

np.append源代碼(注意使用np.concatenate):

In [23]: np.source(np.append) 
In file: /usr/local/lib/python3.5/dist-packages/numpy/lib/function_base.py 

def append(arr, values, axis=None): 
    """ 
    ... 
    """ 
    arr = asanyarray(arr) 
    if axis is None: 
     if arr.ndim != 1: 
      arr = arr.ravel() 
     values = ravel(values) 
     axis = arr.ndim-1 
    return concatenate((arr, values), axis=axis)