[英]Python: how to map ID to matrix indices?
我必须将数字ID
转换为我知道维数的矩阵M
的索引i
和j
。 表达式如下:
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
从一个Series
的R
与MultiIndex
i
, j
使用.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.