相关疑难解决方法(0)

散列为numpy数组的最有效属性

我需要能够存储numpy array一个dict用于缓存的目的.哈希速度很重要.

array代表indicies,所以在对象的真实身份并不重要,值.可变性不是一个问题,因为我只对当前价值感兴趣.

我应该散列什么才能将其存储在一个dict

我目前的方法是使用str(arr.data),这比md5我的测试更快.


我已经从答案中加入了一些例子来了解相对时间:

In [121]: %timeit hash(str(y))
10000 loops, best of 3: 68.7 us per loop

In [122]: %timeit hash(y.tostring())
1000000 loops, best of 3: 383 ns per loop

In [123]: %timeit hash(str(y.data))
1000000 loops, best of 3: 543 ns per loop

In [124]: %timeit y.flags.writeable = False ; hash(y.data)
1000000 loops, best of 3: 1.15 us per loop

In [125]: %timeit hash((b*y).sum())
100000 loops, …
Run Code Online (Sandbox Code Playgroud)

python numpy

51
推荐指数
4
解决办法
4万
查看次数

如何基于某些等价关系从矩阵列表中删除重复项?

给定一些对称整数矩阵列表,我想在以下等价关系下删除所有重复项:

二KXK矩阵M1M2是等价的,如果有一些排列s{1,...,k}使得对所有ij{1,...,k}我们有M1_ij = M2_s(i)s(j),即两个矩阵是“平等”的,如果我可以同时置换的行和列得到一个从其他。

不幸的是,我的幼稚方法(在构建列表时,检查列表中是否已存在新矩阵的任何排列)被证明太慢了。

我可能想到的一些可能更快的替代方法是将所有矩阵放入列表,将它们置换为“规范置换”,然后按照此处的描述删除重复项。但是,我也不知道如何在代码中实现这样的“规范排列”。

要进一步缩小范围:矩阵相对较小(k <= 4),列表将包含5或6位数字的矩阵,并且矩阵的必定dtype必须是某种整数类型(当前intc,但我可以更改)。

最终列表的顺序无关紧要,每个对等类的代表也没有生存。如果需要的话,整个过程可能需要花费几个小时,而不是几天。

有某种合理有效的方法可以实现这一目标吗?我是否再次错过了一些很酷的NumPy或SciPy设施,这对我有帮助吗?


根据要求,提供了一些小例子来说明等价关系如何工作:

矩阵{{1,1,1},{1,2,0},{1,0,3}}{{1,1,1},{1,3,0},{1,0,2}}是等价的,因为置换{1,2,3}->{1,3,2}将一个变换为另一个。

矩阵{{1,1,1},{1,2,0},{1,0,3}}{{1,1,0},{1,2,1},{0,1,3}}不是等价的,您必须在不对角线排列的情况下更改1的位置。

python numpy

5
推荐指数
1
解决办法
135
查看次数

标签 统计

numpy ×2

python ×2