我一直停留在这个简单的问题上,但我似乎无法弄清楚,我有一个对角线数组:
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]]
感谢您的帮助
答案 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]])