2013-05-14 94 views
0

我想補充一些numpy的陣列到一個數組,我的代碼如下所示:追加列表元素的symarray

m1=symarray('', 2) 
for i in range(0,len(countersum)): 
    if countersum[i]==1: 
    m1.append(gmcounter[i]) 

這給錯誤

AttributeError: 'numpy.ndarray' object has no attribute 'append' 

我也試圖改變追加到vstack但它給出了相同的錯誤

如果我修改最後一行有m1 = gcounter [i]它的工作原理,但只選擇滿足條件的gcounter的第一個元素,並忽略所有事後秒。

有誰知道我該如何解決這個問題?

我已經看到線程Append a NumPy array to a NumPy array但我無法事先聲明我需要作爲numpy數組追加。

非常感謝

+0

您不能修改numpy的數組的大小。你**必須**創建一個新的更大的陣列。當你想要矢量化操作時應該使用numpy;它不是一個神奇的庫,它可以加速序列的操作,而不管它們是什麼。如果你想要可變大小的數組,使用stdlib中的'array'模塊。 – Bakuriu 2013-05-14 14:49:56

+0

@Bakuriu我使用它們作爲符號而不是數值的矩陣,所以我需要使用symarray,我認爲stdlib中的那些將不會用於我的目的。你知道是否有任何方法可以爲symarray執行append功能? – user124123 2013-05-14 15:00:35

+0

正如我所說*沒有辦法將值附加到numpy數組*。創建一個大小增加一個新數組並添加新值。順便說一下,'vstack'是'numpy'包中的一個函數,*不是'ndarray'的一個方法。 – Bakuriu 2013-05-14 15:19:11

回答

1

@Bakuriu是正確的,你不能沒有複製擴展numpy的陣列。然而,根據不同的應用程序,你可以在numpy的數組轉換成列表,並從那裏操縱它:

m1 = sympy.symarray('', 2) 

m2 = list(m1) 
x = sympy.symbols('x') 
m2.append(x) 

print m2 

這給

>>> [_0, _1, x] 
+0

我會如何做到這一點,即m1 = [],然後用值填充m1,然後聲明它是一個sympy數組? – user124123 2013-05-14 15:23:12

+0

symarray只是一個幫助函數,它創建一個填充了前綴符號的(numpy)數組http://nullege.com/codes/search/sympy.symarray。沒有像「sympy數組」那樣的東西,只有充滿sympy對象的迭代器。所以,是的,創建一個空列表,並填充sympy對象(符號),如果您認爲合適的話。 – Hooked 2013-05-14 15:28:14

+0

我剛剛嘗試了使用append填充m1作爲列表,然後將它聲明爲symarray,m1 = symarray(m1,2)'並返回: '[[[0,2],[2,0] ] _0 [[0,2],[2,0]] _1]'。這對我來說很神祕,是否有辦法讓它返回[[2,0],[0,2]]? – user124123 2013-05-14 15:33:31