【发布时间】:2012-09-05 02:53:33
【问题描述】:
很难解释我想用文字做什么,所以这里有一个例子。
假设我们有以下输入:
In [76]: x
Out[76]:
0 a
1 a
2 c
3 a
4 b
In [77]: z
Out[77]: ['a', 'b', 'c', 'd', 'e']
我想得到:
In [78]: ii
Out[78]:
array([[1, 0, 0, 0, 0],
[1, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0]])
ii 是一个布尔掩码数组,可应用于z 以取回原始x。
我目前的解决方案是编写一个函数,将z 转换为list 并使用index 方法获取z 中元素的索引,然后生成除索引之外的一行零哪里有一个。这个函数被应用到x 的每一行以获得想要的结果。
【问题讨论】:
-
那么,您的问题是什么?写这个函数?当然,
np.choose(["abcde".index(i) for i in x], "abcde")之类的东西不适合你? -
好吧,当我运行你的线路时,我得到了
array(['a', 'a', 'c', 'a', 'b'], dtype='|S1')。我想要的是['a', 'a', 'c', 'a', 'b']的掩码(5 个布尔元素的列表)。这是否更清楚? -
您是在寻找一种更快的方法还是只是更短的输入方式,例如:np.array([[j == i for j in z] for i in x], dtype=int)跨度>
-
@WouterOvermeire 理想地寻找两者