如何以我通常使用列表(list)的方式使用numpy陣列或矩陣? 我想建立乙個空的陣列(或矩陣),然後每次新增一列(或行)到這個陣列(或矩陣)。
目前能想到的方法是:
mat = none
for col in columns:
if mat is none:
mat = col
else:
mat = hstack((mat, col))
而如果它是乙個列表,我會這樣做:
有沒有辦法在numpy中這樣使用陣列或矩陣?
最佳解決方案
上面對numpy的使用觀念可能有誤。 numpy陣列儲存在連續的記憶體塊中,如果要將行或列新增到現有陣列中,則需要將整個陣列複製到乙個新的記憶體塊,從而為要儲存的新元素建立間隙。如果重複建立乙個陣列,這是非常低效的。
在新增行的情況下,最好的辦法是建立乙個與您的資料集最終大小一樣的陣列,然後向其中按行新增資料:
import numpya = numpy.zeros(shape=(5,2))
aarray([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
a[0] = [1,2]a[1] = [2,3]
aarray([[ 1., 2.],
[ 2., 3.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
次佳解決方案
例如item可以是乙個列表,乙個陣列或任何可迭代的結構,只要每個item具有相同數量的元素。在這個特定的情況下(data是一些迭代持有矩陣列),你可以簡單地使用
mat = numpy.array(data)
(還要注意,使用list作為變數名可能不是乙個好的做法,因為它掩蓋了內建型別的名稱,這可能會導致錯誤。)
如果由於某種原因,你真的想建立乙個空的陣列,你可以使用 numpy.array(),但這是很少有用的!
第三種解決方案
在numpy中建立乙個空的多維陣列(例如乙個二維陣列m*n來儲存你的矩陣),如果你不知道(m)你會追加多少行,而不關心計算成本(即在每次附加元素時re-buildinging陣列),您可以設定0為要新增到的維度:x = np.empty(shape=[0, n])。
這樣你可以使用例如(這裡我們假設我們不知道什麼時候建立空矩陣m = 5和n = 2):
import numpy as np
n = 2
x = np.empty(shape=[0, n])
print x
這會給你:
[[ 0. 0.]
[ 0. 1.]
[ 1. 0.]
[ 1. 1.]
[ 2. 0.]
[ 2. 1.]
[ 3. 0.]
[ 3. 1.]
[ 4. 0.]
[ 4. 1.]]
如何在NumPy中建立空陣列 矩陣?
在新增行的情況下,你最好的選擇是建立乙個與資料集最終一樣大的陣列,然後向它新增資料 row by row 複製 import numpy a numpy zeros shape 5 2 aarray 0.0.0.0.0.0.0.0.0.0.a 0 1,2 a 1 2,3 aarray 1.2.2.3...
C 在MVC中如何建立乙個執行緒
這個其實是很簡單的,但是網上的例子大多是控制台應用程式中實現的。在mvc中的都沒看到過,如果沒用過。會遇到一些問題。首先是乙個要呼叫的方法 public class rabbitmqinstance global.asax 中的實現 th.start 第二種實現 thread th1 new thr...
在shell中如何判斷乙個變數是否為空
在shell中如何判斷乙個變數是否為空 判斷乙個指令碼中的變數是否為空,我寫了乙個這樣的shell指令碼 bin sh filename test.sh para1 if n para1 then echo is null else echo not null fi 然後把該指令碼 test.sh通...