在二维numpy数组中插入值

时间:2018-10-03 01:47:06

标签: arrays python-3.x numpy 2d

我一直停留在这个简单的问题上,但我似乎无法弄清楚,我有一个对角线数组:

N = [1,2,3,4,5,6,7,8,9]
A = numpy.diag(N)

我有一个行和列索引的列表,例如:     B = [[1,0],[2,1],[3,2]]

给定B的位置,我想在A中插入值1,这有助于将A视为2-D矩阵,而B则是我想在其中插入值A的坐标集。

我尝试使用numpy.put,但是它似乎不允许我访问2d数组,而且我不知道如何从for循环的角度考虑它。

所需的答案如下:

A = [[1,0,0,0,0,0,0,0,0],[1,2,0,0,0,0,0,0,0],[0,1,3,0,0,0,0,0,0],[0,0,0,4,0,0,0,0,0],...,[0,0,0,0,0,0,0,0,9]]

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

也许是循环

for x in B:
    A[x[0],x[1]]=1

A
Out[189]: 
array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 2, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 4, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 5, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 7, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 8, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 9]])

答案 1 :(得分:0)

您需要将第一个和第二个坐标分组在一起:

I, J = zip(*B)

I, J = numpy.transpose(B)

然后您可以直接为A编制索引

A[I, J] = 1

答案 2 :(得分:0)

B创建一个numpy数组:

B = np.array(b)

然后仅使用第一列和第二列进行索引:

A[B[:, 0], B[:, 1]] = 1

array([[1, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 2, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 3, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 4, 0, 0, 0, 0, 0],
       [0, 0, 0, 0, 5, 0, 0, 0, 0],
       [0, 0, 0, 0, 0, 6, 0, 0, 0],
       [0, 0, 0, 0, 0, 0, 7, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 8, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 9]])