在python中创建值矩阵
我有一个数据集如下在python中创建值矩阵,python,numpy,matrix,data-manipulation,Python,Numpy,Matrix,Data Manipulation,我有一个数据集如下 d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]} df = pd.DataFrame(data= d) 我想围绕id创建一个值矩阵 带结石:dist(id1)-dist(id2) 如果您有任何建议,我们将不胜感激。我对numpy不太熟悉,但您可以根据现有的数据结构,使用这种稍微复杂的词典理解创建矩阵: matrix = {id: {v: d.get("dist")[i] - d.get("dist")[j] for
d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}
df = pd.DataFrame(data= d)
我想围绕id创建一个值矩阵
带结石:dist(id1)-dist(id2)
如果您有任何建议,我们将不胜感激。我对numpy不太熟悉,但您可以根据现有的数据结构,使用这种稍微复杂的词典理解创建矩阵:
matrix = {id: {v: d.get("dist")[i] - d.get("dist")[j] for j, v in enumerate(d.get("id"))} for i, id in enumerate(d.get("id"))}
矩阵的键是列,每列的键是行。您可能可以以更简洁的方式编写此文件,但这是符合您要求的唯一内置答案。我不熟悉numpy,但您可以根据现有的数据结构,使用此稍微复杂的字典理解创建矩阵:
matrix = {id: {v: d.get("dist")[i] - d.get("dist")[j] for j, v in enumerate(d.get("id"))} for i, id in enumerate(d.get("id"))}
矩阵的键是列,每列的键是行。你也许可以用更简洁的方式写这篇文章,但这是一个内置的唯一符合你要求的答案。(编辑)以下是通过numpy之美得到的简化版本:
import numpy as np
d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}
a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)
# the solution
print a-b
# [[ 0 100 100 300]
# [-100 0 0 200]
# [-100 0 0 200]
# [-300 -200 -200 0]]
(旧答案)你可以用一点矩阵代数:
import numpy as np
d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}
a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)
# some matrix algebra
c = b.dot(a)
e = c/a
f = c/b
# the solution
print f-e
# [[ 0 100 100 300]
# [-100 0 0 200]
# [-100 0 0 200]
# [-300 -200 -200 0]]
(编辑)以下是通过numpy之美的简化版本:
import numpy as np
d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}
a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)
# the solution
print a-b
# [[ 0 100 100 300]
# [-100 0 0 200]
# [-100 0 0 200]
# [-300 -200 -200 0]]
(旧答案)你可以用一点矩阵代数:
import numpy as np
d = {'dist': [100, 200, 200, 400],'id': [1, 2, 3, 4]}
a = np.array(d['dist']).reshape(1,-1)
b = np.array(a).reshape(-1,1)
# some matrix algebra
c = b.dot(a)
e = c/a
f = c/b
# the solution
print f-e
# [[ 0 100 100 300]
# [-100 0 0 200]
# [-100 0 0 200]
# [-300 -200 -200 0]]
请提供您的尝试代码。请提供您的尝试代码。我明白了,这相当于直接打印a-B更新。给numpy一分。我的原始答案是你们在纸上需要的,我想,我明白了,这相当于直接打印a-B更新版。给numpy一分。我想我最初的答案是你在纸上需要的。