【发布时间】:2019-02-18 18:30:40
【问题描述】:
我试图根据我的字典字符创建一个热门数组:首先,我创建了一个具有行 X 列 (3x7) 的 numpy zeros,然后我搜索每个字符的 id 并为每个字符分配“1” numpy 数组的行。
我的目标是为每个字符分配一个热数组。 “1”表示“存在”,“0”表示“不存在”。这里我们有 3 个字符,所以我们应该有 3 行,而 7 列作为字典中存在的字符。
但是,我收到一条错误消息,指出“TypeError:只有整数标量数组可以转换为标量索引”。有人可以帮我吗?谢谢
为了不让大家误会我的字典:
这是我创建 dic 的方法:
sent = ["a", "b", "c", "d", "e", "f", "g"]
aaa = len(sent)
aa = {x:i for i,x in enumerate(sent)}
我的代码:
import numpy as np
sentences = ["b", "c", "e"]
a = {}
for xx in sentences:
a[xx] = aa[xx]
a = {"b":1, "c":2, "e":4}
aa =len(a)
for x,y in a.items():
aa = np.zeros((aa,aaa))
aa[y] = 1
print(aa)
当前错误:
TypeError: only integer scalar arrays can be converted to a scalar index
我的预期输出:
[[0. 1. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0.]
[0. 0. 0. 0. 1. 0. 0.]]
-------> 因为它的字典所以索引排列应该不同,并且数组中的“1”是一个虚拟的,所以我可以显示我的预期输出。
【问题讨论】:
-
如果是
a = {"a":0, "b":1, "c":5}呢? -
我很抱歉造成误解,但由于我创建了基于 sent = ["a", "b", "c", "d", "e"] aa = {x: i for i,x in enumerate(sent)}................它不会变成上面提到的那样。由于您有 3 个字符,因此根据我的代码,它将是 {"a":0, "b":1, "c":2}。
-
好的,那
[a, b, a, d, c]会给我什么? -
我假设你的 [a,b,a,d,c] 也是一个字符列表?那么就会变成这样,对吧?b = ["a", "b", "a", "d", "c"] for x in b: print(a[x])...... ......输出[0,1,0,3,2]??但我不明白为什么我们需要找到这些?由于我还是初学者,请告诉我
-
只是想了解如何生成一个热矩阵的原因。它是基于字典顺序吗?或者它是否与它出现的顺序有关......等等。
标签: python arrays numpy one-hot-encoding