numpy';s等价于MATLAB';s(矢量化)sub2ind(…,I,J)
假设numpy';s等价于MATLAB';s(矢量化)sub2ind(…,I,J),numpy,indexing,Numpy,Indexing,假设I和J都是列向量(比如长度K),因此对于有效索引K,I和J的第K个条目表示一些N×N矩阵MAT中的行和列坐标 使用MATLAB,要使用与I和J指定的位置对应的坐标分配到MAT中的位置,可以编写: MAT(sub2ind([N N], I, J)) = X; …其中X是长度为K的向量 有了numpy,我能想出的最好办法就是 MAT.flat[[np.ravel_multi_index((I[k], J[k]), (N, N)) for k in range(K)]] = X 有没有更“口语
I
和J
都是列向量(比如长度K),因此对于有效索引K,I
和J
的第K个条目表示一些N×N矩阵MAT
中的行和列坐标
使用MATLAB,要使用与I
和J
指定的位置对应的坐标分配到MAT
中的位置,可以编写:
MAT(sub2ind([N N], I, J)) = X;
…其中X
是长度为K的向量
有了numpy,我能想出的最好办法就是
MAT.flat[[np.ravel_multi_index((I[k], J[k]), (N, N)) for k in range(K)]] = X
有没有更“口语化的numpy”的方法呢?这比使用numpy要容易得多
i = I.ravel()
j = J.ravel()
MAT[i,j] = X
我使用ravel
方法将列转换为一维数组。另一种选择是
MAT[I.flat, J.flat] = X
我不能在看不到完整上下文的情况下确定,但我怀疑您可以修改创建I
和J
的代码,使它们成为一维数组(即使用shape(K,)
),而不是使用shape(K,1)
的列。如果你那样做了,你就可以写了
MAT[I,J] = X
这比使用numpy要容易得多
i = I.ravel()
j = J.ravel()
MAT[i,j] = X
我使用ravel
方法将列转换为一维数组。另一种选择是
MAT[I.flat, J.flat] = X
我不能在看不到完整上下文的情况下确定,但我怀疑您可以修改创建I
和J
的代码,使它们成为一维数组(即使用shape(K,)
),而不是使用shape(K,1)
的列。如果你那样做了,你就可以写了
MAT[I,J] = X