我有一个数据框,其中包含一列vector
,其中包含约50万行数组向量。我想做的是将该列的内容卸载到二维数组中,但是我不知道这样做的最快方法。
这是我要获取的数组的格式([1, 2], [3, 4]
和[5, 6]
是数据框中包含的数组):
array([[1, 2],
[3, 4],
[5, 6]])
我尝试了to_numpy
,as_matrix
和.values
,但是它给了我一个1D数组,这不是我想要的:
array([array([1, 2]),
array([3, 4]),
array([5, 6])])
给我想要的结果的唯一方法是np.asarray()
和np.array()
,但是在我看来,它们花费了太多时间。
我想要的是与我使用numpy数组方法(vector1,2和8)获得的数组相同的数组,但是如果可能的话会更快,因为当我们拥有大量数据时会花费太多时间。
谢谢您的帮助!
edit :这是我执行以下操作的函数:它接受一个数据框参数,该数据框包含两列:id和vectors,它们是一系列数组对象。
id vectors
1 array([1,2,3], dtype='float32')
2 array([3,4,5], dtype='float32')
3 array([6,7,8], dtype='float32')
[11530行x 2列]
我要使用此功能要做的是将列表ID的内容快速而轻松地卸载到列表中,并将列向量的内容加载到数组中。所以我想要一个二维数组的数组矢量。
def filter_df(df, request):
start = time.time()
filtered_df = df
ids = filtered_df['id'].tolist()
filtered_df_vectors = filtered_df['vectors'].tolist()
vectors9 = np.array(filtered_df['vectors'].tolist())
vectors1 = np.asarray(filtered_df_vectors)
vectors2 = np.array([f for f in filtered_df_vectors],dtype=np.float32)
vectors3 = filtered_df['vectors'].as_matrix()
vectors4 = filtered_df['vectors'].to_numpy()
vectors5 = filtered_df['vectors'].values
vectors6 = filtered_df.iloc[:,-1].values
vectors8 = np.array(filtered_df['vectors'].values.tolist())
vectors9 = np.array(filtered_df['vectors'].tolist())
filter_duration= time.time()-start
logger.info(f"duration: {filter_duration}s")
return ids,vectors2,filter_duration
我无法复制并粘贴将其返回给我的结果数组的确切输出,因为它对您不可读,因此我只展示通过多种测试方法获得的两种数组。
对于使用numpy方法的矢量1、2、8和9,我获得的格式是我正在寻找的格式,但是需要花费很多时间(大约0.7秒,对于我的情况来说太慢了) )。我不会复制粘贴获得的确切数组,因为它对您不可读。只知道[1,2,3]代表我得到的是这
array([[1,2,3],
[4,5,6],
[7,8,9]], dtype=float32)
ndim : 2
dtype('float32')
shape : (11530, 300)
size : 3459000
对于向量3、4、5和6,其中我不使用像熊猫to_numpy或as_matrix这样的numpy方法,速度很快(〜0.05秒),但以相同的形式返回给我这样格式的数组:
array([array([1,2,3], dtype=float32),
array([4,5,6], dtype=float32),
array([7,8,9], dtype=float32)], dtype=object)
ndim : 1
dtype('O')
shape : (11530,)
size : 11530
我不明白为什么它不能像numpy方法那样给我同样的数组。