gpt4 book ai didi

python - Lambda 函数 - TypeError : unhashable type: 'numpy.ndarray'

转载 作者:行者123 更新时间:2023-12-02 19:52:39 25 4
gpt4 key购买 nike

我有一个 numpy 二维数组,每一列都有分类数据。

我尝试分别对每一列的数据进行编码,同时可能在每种情况下处理看不见的数据。

我有这个代码:

from sklearn.preprocessing import LabelEncoder

for column in range(X_train.shape[1]):

label_encoder = LabelEncoder()

X_train[:, column] = label_encoder.fit_transform(X_train[:, column])

mappings = dict(zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)))

map_function = lambda x: mappings.get(x, -1)

X_test[:, column] = map_function(X_test[:, column])

我得到这个错误:

---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-***********> in <module>
39 mappings = dict(zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)))
40 map_function = lambda x: mappings.get(x, -1)
---> 41 X_test[:, column] = map_function(X_test[:, column])
42
43

<ipython-input-***********> in <lambda>(x)
38 X_train[:, column] = label_encoder.fit_transform(X_train[:, column])
39 mappings = dict(zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)))
---> 40 map_function = lambda x: mappings.get(x, -1)
41 X_test[:, column] = map_function(X_test[:, column])
42

TypeError: unhashable type: 'numpy.ndarray'

我该如何解决这个问题?

总的来说,你会建议一个更好的方法来做我想做的事吗?

附言

我试图这样做以查看发生了什么:

for column in range(X_train.shape[1]):
label_encoder = LabelEncoder()
X_train[:, column] = label_encoder.fit_transform(X_train[:, column])
mappings = dict(zip(label_encoder.classes_, label_encoder.transform(label_encoder.classes_)))

try:
map_function = lambda x: mappings.get(x, -1)
X_test[:, column] = map_function(X_test[:, column])
except:
print(X_test[:, column])
for i in range(X_test[:, column].shape[0]):
if isinstance(X_test[i, column],np.ndarray):
print(X_test[i, column])
print()

但实际上 print(X_test[i, column]) 没有打印任何内容,所以我不确定 X_test[:, column] 中是否有任何 numpy 数组.

我实际上还检查了 if not isinstance(X_test[i, column],str) 并且再次没有打印任何内容所以 X_train[:, column]在每个 column 必须是一个字符串。

附言2

当我这样做时:

 for i in range(X_test[:, column].shape[0]):
X_test[i, column] = mappings.get(X_test[i, column], -1)

它实际上没有错误,所以这意味着出于某种原因,在我定义 lambda 函数的方式中,我将整个 numpy 数组而不是它的元素分别发送给它。

最佳答案

这里发生的是,发送到 map_function 的是实际向量,它不能用作字典中的键,因为它不可哈希,因此会出现错误。

换行

map_function = lambda x: mappings.get(x, -1)

map_function = np.vectorize(lambda x: mappings.get(x, -1))

这将导致每个元素都被用作映射中的键,如果它们都确实是可散列的,它就可以工作。

关于python - Lambda 函数 - TypeError : unhashable type: 'numpy.ndarray' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57793536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com