使用numpy

问题描述 投票:0回答:1

可以创建一个像Python词典这样的结构,但在其中使用numpy阵列?

,例如,如果我们有2个命名

numpy.ndarray
keys
vals
,我们如何使用它们来创建类似于常规python词典的类别,但得到了
NumpyHashmap
S的支持?
这样做的目的是比Python词典具有更高的记忆效率结构。 
numpy.ndarray

可以不变。

NumpyHashmap

    

您可以使用稀疏阵列模仿这种行为。这是依靠
import numpy as np

keys = np.array([1, 13, 24, 35, 92], dtype=np.uint16)
vals = np.array([1.234, 2.345, 3.456, 4.567, 5.678], dtype=np.float32)

# How to create a numpy-backed dictionary/hashmap?
hashmap = NumpyHashmap(keys, vals)
print(hashmap[13])      # 2.345

的最小实现:
python arrays python-3.x numpy data-structures
1个回答
0
投票
scipy.sparse

打印:

import numpy as np import scipy.sparse as sp class NumpyHashMap: """A hash map for numpy arrays""" def __init__(self, keys, vals): shape = (np.max(keys) + 1, 1) self._lookup = sp.csr_array((vals, (keys, np.zeros_like(keys))), shape=shape) def __getitem__(self, keys): keys = np.atleast_1d(keys) return self._lookup[keys, [0]] keys = np.array([1, 13, 24, 35, 92], dtype=np.uint16) vals = np.array([1.234, 2.345, 3.456, 4.567, 5.678], dtype=np.float32) lookup = NumpyHashMap(keys, vals) print(lookup[[1, 13, 24, 45]])
so而不是
[1.234 2.345 3.456 0. ]

KeyError
将返回
0

。该实施可以适用于例如取而代之的是返回

np.nan
或提出和错误,并确定不存在哪个密钥。
Maybe仍然有帮助!
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.