- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含多个字符串列的数据框,我想将其转换为分类数据,以便我可以运行一些模型并从中提取重要特征。
但是,由于唯一值的数量,单热编码数据会扩展到大量列,从而导致性能问题。
为了解决这个问题,我正在试验 get_dummies 中的 Sparse = True
参数。
test1 = pd.get_dummies(X.loc[:,['col1','col2','col3','col4']].head(10000))
test2 = pd.get_dummies(X.loc[:,['col1','col2','col3','col4']].head(10000),sparse = True)
但是,当我检查我的两个比较对象的信息时,它们占用相同数量的内存。 Sparse = True
使用的空间似乎并没有减少。这是为什么?
test1.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 10000 entries, 537293 to 752152
Columns: 2253 entries,...
dtypes: uint8(2253)
memory usage: 21.6 MB
test2.info()
<class 'pandas.core.sparse.frame.SparseDataFrame'>
Int64Index: 10000 entries, 537293 to 752152
Columns: 2253 entries, ...
dtypes: uint8(2253)
memory usage: 21.9 MB
最佳答案
我看着 Pandas get_dummies源,但到目前为止无法发现错误。这是我在下面做的一个小实验(上半部分是用真实数据重现你的问题)。
In [1]: import numpy as np
...: import pandas as pd
...:
...: a = ['a', 'b'] * 100000
...: A = ['A', 'B'] * 100000
...:
...: df1 = pd.DataFrame({'a': a, 'A': A})
...: df1 = pd.get_dummies(df1)
...: df1.info()
...:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 781.3 KB
In [2]: df2 = pd.DataFrame({'a': a, 'A': A})
...: df2 = pd.get_dummies(df2, sparse=True)
...: df2.info()
...:
<class 'pandas.core.sparse.frame.SparseDataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 781.3 KB
到目前为止,与您的结果相同(df1
的大小等于df2
的大小),但如果我显式转换 df2
使用 to_sparse
和 fill_value=0
稀疏
In [3]: df2 = df2.to_sparse(fill_value=0)
...: df2.info()
...:
<class 'pandas.core.sparse.frame.SparseDataFrame'>
RangeIndex: 200000 entries, 0 to 199999
Data columns (total 4 columns):
A_A 200000 non-null uint8
A_B 200000 non-null uint8
a_a 200000 non-null uint8
a_b 200000 non-null uint8
dtypes: uint8(4)
memory usage: 390.7 KB
现在内存使用量减半,因为一半的数据是 0
。
总之,我不确定为什么 get_dummies(sparse=True) 即使转换为 SparseDataFrame 也不压缩数据帧,但有一个解决方法。相关讨论在github上进行get_dummies with sparse doesn't convert numeric to sparse但结论似乎仍悬而未决。
关于python - pd.get_dummies 数据帧在 Sparse = True 时与 Sparse = False 时大小相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51709377/
有人知道什么时候最好选择哪个吗?在我看来,它们是一样的... lsmr lsqr 最佳答案 两种软件包的功能相同。 LSMR基于2010年的Fong&Saunders算法(请参阅paper),并且最近
似乎 scipy.sparse.linalg 的迭代求解器不支持 scipy.sparse 的稀疏矩阵数据类型作为方程系统的右侧(而直接求解器会)。考虑以下简短示例: import numpy as
我有一个包含多个字符串列的数据框,我想将其转换为分类数据,以便我可以运行一些模型并从中提取重要特征。 但是,由于唯一值的数量,单热编码数据会扩展到大量列,从而导致性能问题。 为了解决这个问题,我正在试
我有一些需要每天同步的 VM 镜像。 VM 文件是稀疏的。 为了节省网络流量,我只想传输图像的真实数据。 我在 rsync 中使用 --sparse 选项进行尝试,但在网络流量上,我看到整个大小都通过
我有一些不明白的信息: Bigtable may be understood a sparse table. Most cells contain nullvalues - too sparse to
我一直在查看 Matlab 的 sparse documentation试图找出是否有任何指导方针来说明何时使用稀疏表示而不是完整表示是有意义的。 例如,我有一个包含大约 30% 非零条目的矩阵 da
当我尝试编译以下程序时,编译器提示 j 和 row 未声明,这让我感到惊讶,因为 Chapel - Ranges defined using bounds of type 'range(int(64)
我需要以某种方式在磁盘上存储一个 512^3 阵列,我目前使用的是 HDF5。由于阵列稀疏,因此浪费了大量磁盘空间。 HDF5 是否为稀疏数组提供任何支持? 最佳答案 一种解决方法是使用 compre
稀疏张量与自身或密集张量的乘法在 TensorFlow 中似乎不起作用。下面的例子 from __future__ import print_function import tensorflow as
我有一个git存储库,其中有一堆大型csv,我不想克隆,因此我遇到了git sparse-checkout和这篇文章:https://github.blog/2020-01-17-bring-your
是否有一种简单的方法可以按列贬低稀疏矩阵,同时将零值视为缺失(使用 Matrix 包)? 我似乎遇到两个问题: 找到合适的列意味着 空单元格被视为零而不是缺失: M0 或者@user20650评论
我在训练具有稀疏输入数据的神经网络以解决监督回归问题时遇到问题。当我对输入数据执行均值归一化(减去均值再除以标准差)时,我得到了很多NaN值。我想知道是否有人有处理此类问题的经验。缩放稀疏输入数据的正
在 Eigen 中编辑稀疏矩阵对角线的最快方法是什么?我已经使用三元组填充了它,但我偶尔需要更改所有对角线值(它们已经设置为非零值)。 最佳答案 如果可以接受,您可以简单地使用它们的索引,例如 sp_
我看到“稀疏”和“稀疏”的使用方式表明它可以提高模型的准确性。例如: I think the unsupervised phase might be not so important if some
MATLAB Coder 似乎很花哨,可以通过将代码转换为 C/C++ 或 MEX 来加快 MATLAB 代码的速度。但是它似乎不支持稀疏矩阵,或者 matlab 函数 sparse 这对我的代码至关
我有一个使用 scipy.sparse.linalg.gmres 求解稀疏线性系统的简单代码 W, S = load_data() M = normalize(W.T.astype('float64
我正在尝试创建一个大小为 n 的多维数组(其中 n 是符号形状张量的一部分)。该数组在每个区域中都应有 0,但很少有区域是变量 b_class。 这是一个简单的 Numpy 实现,但在这种情况下,我们
Java 7 defines this option ,但我不明白它的用处。考虑这个简单的程序,它在一台足够新的 Linux 机器上运行,带有 Java 6 JVM: public static vo
我有一个 CSR matrix : >> print type(tfidf) 我想对 CSR matrix 的两行进行点积: >> v1 = tfidf.getrow(1) >> v2 = tfid
尽管一切似乎都已矢量化,但以下代码运行速度太慢。 from numpy import * from scipy.sparse import * n = 100000; i = xrange(n); j
我是一名优秀的程序员,十分优秀!