gpt4 book ai didi

python - 二维数组的 numpy in1d 实现?

转载 作者:太空狗 更新时间:2023-10-30 01:16:05 33 4
gpt4 key购买 nike

我有一个代表状态空间的 2D numpy 数组 S,有 80000000 行(作为状态)和 5 列(作为状态变量)。

我用 S 初始化 K0,在每次迭代中,我对 Ki 中的所有状态应用状态转换函数 f(x),并删除 f(x) 不在 Ki 中的状态,得到 Ki+1。直到收敛,即 Ki+1 = Ki。

这样做会花费很长时间:

K = S
to_delete = [0]
While to_delete:
to_delete = []
for i in xrange(len(K)):
if not f(i) in K:
to_delete.append(K(i))
K = delete(K,to_delete,0)

所以我想做一个向量化的实现:

在列中切片 K,应用 f 并再次连接它们,从而以某种方式获得 f(K)。

现在的问题是如何得到一个长度为 len(K) 的数组,比如 Sel,其中每一行 Sel[i] 确定 f(K[i]) 是否在 K 中。就像函数 in1d 一样工作。

那么制作起来就简单了

K=K[Sel]]

最佳答案

您的问题很难理解,因为它包含无关信息和拼写错误。如果我理解正确的话,你只是想要一种有效的方法来对二维数组的行执行集合操作(​​在这种情况下 Kf(K))。

您可以使用 numpy.in1d 执行此操作如果你创建 structured array查看。

代码:

如果这是K:

In [50]: k
Out[50]:
array([[6, 6],
[3, 7],
[7, 5],
[7, 3],
[1, 3],
[1, 5],
[7, 6],
[3, 8],
[6, 1],
[6, 0]])

这是 f(K)(在这个例子中,我从第一个列减去 1,第二个列加 1):

In [51]: k2
Out[51]:
array([[5, 7],
[2, 8],
[6, 6],
[6, 4],
[0, 4],
[0, 6],
[6, 7],
[2, 9],
[5, 2],
[5, 1]])

然后您可以通过执行以下操作找到 K 中的所有行也可以在 f(K) 中找到:

In [55]: k[np.in1d(k.view(dtype='i,i').reshape(k.shape[0]),k2.view(dtype='i,i').
reshape(k2.shape[0]))]
Out[55]: array([[6, 6]])

viewreshape 创建平面结构化 View ,以便每一行显示为 in1d 的单个元素。 in1d 创建一个包含 k 的匹配项的 bool 索引,用于计算索引 k 并返回过滤后的数组。

关于python - 二维数组的 numpy in1d 实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16210738/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com