相关疑难解决方法(0)

当操作数增加时,numpy'=='会切换语义

只是偶然发现了以下情况:

Python 3.6.0 (default, Jan  9 2017, 22:01:27) 
[GCC 4.8.5] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> 
>>> np.version.version
'1.14.2'
>>> 
>>> a = np.ones((100,), np.uint8)
>>> (a[:, None] == a).shape
(100, 100)
>>> a = np.ones((10000,), np.uint8)
>>> (a[:, None] == a).shape
(10000, 10000)
Run Code Online (Sandbox Code Playgroud)

到目前为止如此预期,但现在:

>>> a = np.ones((1000000,), np.uint8)
>>> (a[:, None] == a).shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'bool' object …
Run Code Online (Sandbox Code Playgroud)

python numpy equals operators numpy-broadcasting

7
推荐指数
0
解决办法
77
查看次数

比较ntype对象的numpy数组

我的问题是"为什么?:"

aa[0]
array([[405, 162, 414, 0,
        array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],
      dtype=object),
        0, 0, 0]], dtype=object)

aaa
array([[405, 162, 414, 0,
        array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],
      dtype=object),
        0, 0, 0]], dtype=object)

np.array_equal(aaa,aa[0])
False
Run Code Online (Sandbox Code Playgroud)

那些数组完全相同.

我的最小例子不会重现这个:

be=np.array([1],dtype=object)

be
array([1], dtype=object)

ce=np.array([1],dtype=object)

ce
array([1], dtype=object)

np.array_equal(be,ce)
True
Run Code Online (Sandbox Code Playgroud)

这也不是:

ce=np.array([np.array([1]),'5'],dtype=object)

be=np.array([np.array([1]),'5'],dtype=object)

np.array_equal(be,ce)
True
Run Code Online (Sandbox Code Playgroud)

但是,为了重现我的问题,试试这个:

be=np.array([[405, 162, 414, 0, np.array([list([1, 9, 2]), 18, (405, 18, 207), 64, 'Universal'],dtype=object),0, 0, 0]], dtype=object)

ce=np.array([[405, 162, 414, 0, np.array([list([1, …
Run Code Online (Sandbox Code Playgroud)

python numpy python-3.x

7
推荐指数
1
解决办法
1005
查看次数

pd.get_dummies() 在大范围内缓慢

我不确定这是否已经是最快的方法,或者我这样做效率低下。

我想对具有 27k+ 可能级别的特定分类列进行热编码。该列在 2 个不同的数据集中具有不同的值,因此我在使用 get_dummies() 之前首先组合了级别

def hot_encode_column_in_both_datasets(column_name,df,df2,sparse=True):
    col1b = set(df2[column_name].unique())
    col1a = set(df[column_name].unique())
    combined_cats = list(col1a.union(col1b))
    df[column_name] = df[column_name].astype('category', categories=combined_cats)
    df2[column_name] = df2[column_name].astype('category', categories=combined_cats)

    df = pd.get_dummies(df, columns=[column_name],sparse=sparse)
    df2 = pd.get_dummies(df2, columns=[column_name],sparse=sparse)
    try:
        del df[column_name]
        del df2[column_name]
    except:
        pass
    return df,df2
Run Code Online (Sandbox Code Playgroud)

然而,它已经运行了2个多小时,它仍然卡在热编码中。

我可能在这里做错了什么吗?或者这只是在大型数据集上运行它的性质?

Df 有 6.8m 行和 27 列,Df2 在热编码我想要的列之前有 19990 行和 27 列。

感谢您的建议,谢谢!:)

python pandas categorical-data

5
推荐指数
1
解决办法
3890
查看次数