只是偶然发现了以下情况:
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) 我的问题是"为什么?:"
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) 我不确定这是否已经是最快的方法,或者我这样做效率低下。
我想对具有 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 列。
感谢您的建议,谢谢!:)