2016-05-04 75 views
0

我對Python 2中的NumPy模塊有一個相當基本的問題,特別是trinket.io上的版本。不管方法如何,我都沒有看到如何在多維數組中替換多個數組中的值。這裏有一個例子:基本NumPy數組替換

a = numpy.array([1,2,3]) 
a[0] = 0 

print a 

a = numpy.array([[1,2,3],[1,2,3]]) 
a[0][0] = a[1][0] = 0 

print a 

結果:

array([0, 2, 3], '<class 'int'>') 
array([[1, 2, 3], [1, 2, 3]], '<class 'int'>') 

我需要改變某個值的能力,我的具體代碼之中:

a = numpy.empty(shape = (8,8,2),dtype = str) 

for row in range(a.shape[0]): 
    for column in range(a.shape[1]): 
    a[row][column][1] = 'a' 

謝謝您的時間和任何幫助提供。

+0

您的代碼適用於我,並打印預期結果'[0 2 3]'和'[[0 2 3],[0 2 3]]''。你使用的是什麼版本的Python和numpy? –

+0

未指定版本的python 2和numpy上trinket.io,https://trinket.io/library/trinkets/create?lang=python – InGaN

回答

1

要改變,你可以簡單地這樣做單個值:

a[1,2] = 'b' 

如果你想改變所有的數組,你可以這樣做:

a[:,:] = 'c' 

使用逗號(array[a,b]),而不是( array[a][b]

+0

不幸的是,這會導致ValueError被引發,如果我只是嘗試訪問您的值方法,例如: 進口numpy的 一個= numpy.empty(形狀=(8,8,2),D型細胞= STR) 打印一個[0,0,0] 結果: ValueError異常:元組必須包含main.py – InGaN

0

用numpy版本1.11.0,我得到

[[0 2 3] 
[0 2 3]] 

當我運行你的代碼。我猜你的numpy版本更新更好。

正如user3408085所說,正確的做法是如果您實際上想要將整個第一列零整數,則可以使用a[0,0] = 0更改一個元素或a[:,0]=0

原因a[0][0]=0不修改(至少在你的numpy版本)是一個[0]是一個新的數組。如果您的命令a[0][0]=0分解成2行:

b=a[0] 
b[0]=0 

然後事實證明這一個修改是違反直覺的。

+0

中第5行上所有尺寸的值'a [0]'是矩陣'a'的第一行視圖。這是**不復制**,我不認爲這是任何numpy版本的情況。你可以用'c = a [0]; c [1] = 99;打印一個' –