Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何应用非整数->;整数dict到numpy数组?_Numpy - Fatal编程技术网

如何应用非整数->;整数dict到numpy数组?

如何应用非整数->;整数dict到numpy数组?,numpy,Numpy,假设我有两个数组: dictionary = np.array(['a', 'b', 'c']) array = np.array([['a', 'a', 'c'], ['b', 'b', 'c']]) 我想用字典中的值索引替换数组中的每个元素。因此: for index, value in enumerate(dictionary): array[array == value] = index array = array.astype(int) 要获得: array([[0, 0,

假设我有两个数组:

dictionary = np.array(['a', 'b', 'c'])
array = np.array([['a', 'a', 'c'], ['b', 'b', 'c']])
我想用
字典
中的值索引替换
数组
中的每个元素。因此:

for index, value in enumerate(dictionary):
    array[array == value] = index
array = array.astype(int)
要获得:

array([[0, 0, 2],
       [1, 1, 2]])
有没有矢量化的方法可以做到这一点?我知道如果
array
已经包含索引,并且我想要
dictionary
中的字符串,我可以只做
dictionary[array]
。但我实际上需要在这里“查找”字符串


(我也明白了,但不知道自2010年以来是否有新的功能可用。)

如果您的字典已排序,并且字典和数组包含相同的元素,
np.unique
起作用

uniq, inv = np.unique(array, return_inverse=True)
result = inv.reshape(array.shape)
如果数组中缺少某些元素:

uniq, inv = np.unique(np.r_[dictionary, array.ravel()], return_inverse=True)
result = inv[len(dictionary):].reshape(array.shape)
一般情况:

uniq, inv = np.unique(np.r_[dictionary, array.ravel()], return_inverse=True)
back = np.empty_like(inv[:len(dictionary)])
back[inv[:len(dictionary)]] = np.arange(len(dictionary))
result=back[inv[len(dictionary):]].reshape(array.shape)

解释:
np.unique
以我们在这里使用的形式返回按排序顺序排列的唯一元素,并将索引放入参数的每个元素的排序列表中。因此,要将索引放入原始字典中,我们需要重新映射索引。我们知道
uniq[inv[:len(uniq)]]==字典
。因此,我们必须求解
X[inv[:len(uniq)]==np.arange(len(uniq))
,这就是代码所做的。

非常整洁!非常感谢。我们将稍等片刻,看看是否有人对未排序的词典有一个通用的解决方案。(你有点绕过了查字典的需要。)@capitalcuttle最后一位(“一般情况”)是指未排序的字典。啊,对了。我还没有意识到这点:)。我发现它避免了对字典排序,并使用unique()的排序输出。伟大的顺便说一句,在第二位的第二行有一个额外的右方括号。用几行文字描述
back
的间接方向会很有帮助。