我有一个形状为(
给定以下维度为(
我目前使用的方法是这样的:
我的问题在于时间。如果数据框的长度大约为
我知道减慢过程的步骤是涉及将
m
,n
)的pandas数据框,里面填充了0
和1
。如果将数据框的每一行看作是一个二进制数,则我希望生成一个pandas系列,其中包含由该行表示的十进制数。给定以下维度为(
m
,n
)、填充了0
和1
的矩阵:m = int(1e6)
n = 5
df = pd.DataFrame(np.random.rand(m,n)).round().astype(int)
我目前使用的方法是这样的:
df_asstr = df.astype(str)
bin_series = df_asstr.sum(axis=1).astype(int).astype(str)
def bin_to_int(strnum):
return int(strnum, 2)
decimal_series = bin_series.astype(str).apply(bin_to_int)
我的问题在于时间。如果数据框的长度大约为
m=1e3
,那么整个过程只需要不到一秒钟。然而,当我使用m=1e6
时,需要大约22秒,而且我需要运行许多这样的过程,因此我真的希望加快速度。我知道减慢过程的步骤是涉及将
DataFrame
转换为str
的步骤,即这些行:df_asstr = df.astype(str)
bin_series = df_asstr.sum(axis=1).astype(int).astype(str)
decimal_series = bin_series.astype(str).apply(bin_to_int)
有没有人知道更有效的方法来创建十进制整数序列?非常感谢!
.dot()
在乘法和加法上的运用是关键的加速方式,但<<
也是一个不错的点睛之笔。 - jeremycg