python– 为2D数组实现numpy in1d?

python– 为2D数组实现numpy in1d?,第1张

概述我有一个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_delet

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

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

这样做需要很长时间:

K = Sto_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]]
最佳答案您的问题很难理解,因为它包含无关的信息并包含拼写错误.如果我理解正确,你只需要一种有效的方法对2D数组的行执行设置 *** 作(在这种情况下是K和f(K)的行的交集).

如果创建structured array视图,则可以使用numpy.in1d执行此 *** 作.

码:

如果这是K:

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

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

In [51]: k2Out[51]:array([[5,[2,4],[0,9],[5,2],1]])

然后你可以通过做这样的事情找到在f(K)中找到的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]])

查看和重塑创建平面结构化视图,以便每行显示为in1d的单个元素. in1d创建匹配项的k的布尔索引,用于表示索引k并返回已过滤的数组. 总结

以上是内存溢出为你收集整理的python – 为2D数组实现numpy in1d?全部内容,希望文章能够帮你解决python – 为2D数组实现numpy in1d?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1205330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存