繁体   English   中英

Python:如何将ID映射到矩阵索引?

[英]Python: how to map ID to matrix indices?

我必须将数字ID转换为我知道维数的矩阵M的索引ij 表达式如下:

s = shape(M)
j = (ID - 1) % s[0]
i = np.int((ID - 1 - j) / s[0])

我必须保存来自数据帧df值,每种类型我都重复以下操作:

M = np.zeros((m, n))
s = shape(M)
for k in df.index:
    ID = df['Id'][k]
    y = (ID - 1) % s[0]
    x = np.int((ID - 1 - y) / s[0])
    M[x,y] = M[x,y] + df['R'][k]

我想知道是否有一种方法可以避免每次循环并节省计算时间。

本质上,可以直接获得矩阵M从一个SeriesRMultiIndex ij使用.unstack()

import numpy as np
import pandas as pd

M = pd.DataFrame(index=range(4), columns=range(4))
s = M.shape

df = pd.DataFrame({
    'ID': np.arange(4*4),
    'R':  np.random.rand(4*4),
    })


df['j'] = df.ID % s[0]
df['i'] = np.floor(df.ID / s[0]).astype(np.int)

#In [26]: q.df
Out[26]:
#     ID         R  j  i
# 0    0  0.847475  0  0
# 1    1  0.343867  1  0
# 2    2  0.806913  2  0
# 3    3  0.105036  3  0
# 4    4  0.170887  0  1
# 5    5  0.782607  1  1
# 6    6  0.377907  2  1
# 7    7  0.586738  3  1
# 8    8  0.895262  0  2
# 9    9  0.290358  1  2
# 10  10  0.109228  2  2
# 11  11  0.423267  3  2
# 12  12  0.454464  0  3
# 13  13  0.604296  1  3
# 14  14  0.603850  2  3
# 15  15  0.974695  3  3

df.set_index(['i', 'j'], inplace=True)

M = df['R'].unstack()

# In [30]: q.M
# Out[30]:
# j         0         1         2         3
# i
# 0  0.975895  0.506286  0.055459  0.551988
# 1  0.846078  0.114153  0.981231  0.681130
# 2  0.142864  0.050597  0.323655  0.918745
# 3  0.734922  0.951795  0.209542  0.547859

这是我按照您的步骤操作后的数据帧df

df.head(10):
        Old1   ID   R
i   j           
11  36  1169    0   0.0
12  32  1268    1   0.0
    34  1270    2   0.0
    35  1271    3   2.0
    36  1272    4   0.0
    37  1273    5   0.0
    40  1276    6   0.0
    41  1277    7   0.0
13  32  1371    8   7.0
    33  1372    9   0.0

是否可以将这些值关联到矩阵,即

M[12][35]=2.0  
M[13][32]=7.0

等等。

这是我所做的:

tmp = list(dftmp.index)
tmp = pd.DataFrame(tmp)
tmp.columns = ('a','b')
M[tmp.a, tmp.b] = dftmp.I

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM