2016-05-04 74 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;打印一个' –