根据元组列表分配一个numpy数组

时间:2018-02-22 11:28:02

标签: python-2.7 list numpy indexing tuples

我有一个元组列表,idx = [ (1,4,), (2,3,), (0,), (0,3,4,) ];

我想将与上面列表对应的索引分配给1.

第一个元组(1,4,)包含与第一行对应的列索引,第二个元组(2,3,)包含与第二行对应的列索引等。如果A = zeoros((8,5)则{{1}在第一列和第四列应该有1。 A[0,:]在第二和第三列应该有1。 A[1,:]应该有1个 第0列等

A[2,:]

根据元组列表分配后,我们得到

A = np.zeros((8,5))
array([[0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0.]])
idx = [ (1,4,), (2,3,), (0,), (0,3,4,) ];

怎么做?

2 个答案:

答案 0 :(得分:0)

你可以试试这个。

A = np.zeros((8,5))

idx = [ (1,4,), (2,3,), (0,), (0,3,4,) ]
idx_explicit = np.array(
    [[(i,j) for j in idx[i]] for i in range(len(idx))]).sum()
# [(0, 1), (0, 4), (1, 2), (1, 3), (2, 0), (3, 0), (3, 3), (3, 4)]
A[tuple(np.transpose(idx_explicit))] = 1

有关详细信息,请参阅Integer array indexing

答案 1 :(得分:0)

您可以像这样使用scipy.sparse.coo_matrix

var user = await _userManager.FindByIdAsync(applicationUser.Id);
                    user.ChargeID = applicationUser.ChargeID;
                    user.CenterID = applicationUser.CenterID;
                    user.Name  = applicationUser.Name;
var result = await _userManager.UpdateAsync(user);