gpt4 book ai didi

python - 将列转换为 numpy 数组

转载 作者:太空宇宙 更新时间:2023-11-03 14:29:23 26 4
gpt4 key购买 nike

假设我有这样的 DataFrame:

Type   Vector
A [0.2340, 0.5463, 0.5652, 0.3243, 0.3243]
B [0.3244, 0.5566, 0.2344, 0.1213, 0.9821]
C [0,5652, 0.3453, 0.3454, 0.5656, 0.6766]
D [0,5125, 0.3345, 0.1112, 0.4545, 0.6324]

我想使用np.linalg.norm计算这些向量的距离。我想要得到的是

Type   Vector                                    distance1   distance2 
A [0.2340, 0.5463, 0.5652, 0.3243, 0.3243] A-B A-C
distance3
A-D

作为新列。编辑:我也这样做了:

df['vector'] = df['vector'].apply(lambda x: np.array(x)) 
print(type(df['vector'].iloc[0]))

结果是:

<class 'numpy.ndarray'>

当我简单地说:

print(np.linalg.norm(df['vector'].iloc[0] -df['vector'].iloc[1]))

我得到一个浮点值

但是我迭代得到的行:

ValueError: Wrong number of items passed 544, placement implies 1

我该如何解决这个问题?注意:向量确实有 544 个字符长

最佳答案

如果您正在使用 pickle,请使用 pandas pickle-import:

import pandas as pd

df = pd.read_pickle('your_file_name')

由于 pandas 是基于 numpy 构建的,因此您现在可以将所需的列作为 numpy 数组获取:

import numpy as np:

np.linalg.norm(x = df['your column'])

请注意您的矢量 - 它们的大小不一样!例如,C 和 D 的长度为 6。我假设您的逗号是第一个值的点。

编辑:

一个完整的例子是:

import pandas as pd
import numpy as np

df = pd.DataFrame({
'A':[0.2340, 0.5463, 0.5652, 0.3243, 0.3243],
'B':[0.3244, 0.5566, 0.2344, 0.1213, 0.9821],
'C':[0.5652, 0.3453, 0.3454, 0.5656, 0.6766],
'D':[0.5125, 0.3345, 0.1112, 0.4545, 0.6324]
})

df_distances = df.transpose() #Transpose columns to rows

for col in df:
for col2 in df:
df_distances["{}_{}".format(col, col2)] = np.linalg.norm(df[col] - df[col2])

编辑2(与我的评论相关):

我建议您使用所需的值生成列表或字典,因为将所有内容附加到表中可能会导致表非常大。代码将如下所示:

dic = {}

for col in df:
for col2 in df:
dic["{}_{}".format(col, col2)] = np.linalg.norm(df[col] - df[col2])

关于python - 将列转换为 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47411957/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com