我正在运行以下测试代码:
import cupy as cp
import pandas as pd
arr = [{'df1': pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}),
'df2': pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})},
{'df1': pd.DataFrame({'A': [2, 3, 4], 'B': [5, 6, 7]}),
'df2': pd.DataFrame({'C': [8, 9, 10], 'D': [11, 12, 13]})}]
def my_calculation(d):
df1 = d['df1']
df2 = d['df2']
return df1.groupby('A').mean() + df2.groupby('C').mean()
my_vec_calculation = cp.vectorize(my_calculation)
result = my_vec_calculation(arr)
print(result)
出现以下错误:
return arg.dtype.char
^^^^^^^^^
AttributeError: 'list' object has no attribute 'dtype'
我不确定上面的代码有什么问题。
我无法使用cudf
。是否有办法修改上述代码,以便在不使用cudf
的情况下使用它
1条答案
按热度按时间bbuxkriu1#
这个代码有一点错误,
1.不确定你在做什么,除非你试图通过编程在 Dataframe 之间迭代,即使如此......让我不要冒险猜测;你能澄清一下你真正想做的是什么以及为什么吗?
1.假设你必须这样做,正如它所写的,你必须在数组中下一层,并调用你的
my_calculation
函数中的每个 Dataframe ,类似于d[0]["df1"]
,而不是d ['df 1']。1.当你试图把
my_vec_calculation
作为一个传递变量的函数使用时,你把它示例化为一个方程,只要创建一个传递数组变量的新函数,你现在所拥有的实际上就是你想要result = cp.vectorize(my_calculation(arr))
的输出。1.我真的不知道你想用你的组的输出做什么,但是现在,在我最好的情况下,你有NA作为返回(那是在我得到实际值之后,做
df1.groupby('A').mean()
,你不能像这样把它们加在一起,即使你已经弄清楚了你想用数组中的0和1元素做什么,以及你打算如何使用它们。你能做一些澄清的评论,我会更新答案吗?其他提示:cuPY是一个GPU库,其API与numpy相似,就像cuDF是一个GPU库,其API与panda相似一样。在您尝试了解库API和hte输出的过程中,请尝试使用numpy而不是将其全部保留在CPU上,以简化您的工作流程,然后在您可以使用cuDF将其传输到所有GPU时,只需使用cudf和cupy(除非