我有两个相同大小的2D阵列
a = array([[1,2],[3,4],[5,6]])
b = array([[1,2],[3,4],[7,8]])
Run Code Online (Sandbox Code Playgroud)
我想知道a中的b行.
所以输出应该是:
array([ True, True, False], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
不做:
array([any(i == a) for i in b])
Run Code Online (Sandbox Code Playgroud)
因为a和b很大.
有一个函数可以执行此操作但仅适用于1D数组:in1d
我有一个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)
Run Code Online (Sandbox Code Playgroud)
所以我想做一个矢量化的实现:
在列中切片K,应用f并再次连接它们,从而以某种方式获得f(K).
现在的问题是如何获得一个长度为len(K)的数组,比如Sel,其中每一行Sel [i]确定f(K [i])是否在K中.正好像in1d函数一样.
那么制作起来会很简单
K=K[Sel]]
Run Code Online (Sandbox Code Playgroud)