我有一个数组A[i,j]
。myfunc
最后一个索引包含将应用于每个函数i
并产生输出的函数的各种输入值B[i]
。但是,许多索引的值j
不会B
对myfunc
. 这可以通过使用条件索引(例如C = C[C>mythreshold]
for 循环)相对容易地切出相关值来实现,如下面的 MWE 所示:
def myfunc(X):
return np.square(X).sum()
A = np.floor(np.random.rand(3,4)*100)
mythreshold = 10
(N1, N2) = A.shape
B = np.zeros(N1)
for i in range(N1):
C = A[i,:]
C = C[C>mythreshold]
B[i] = myfunc(C)
我不得不把它分解成 for 循环,这样我就可以在A
不删除整个数组的切片的情况下删除切片。这是因为我不能删除A[i,:]
for onei
的元素而不删除另一个的相应元素i
。但是,为了提高速度,我想尽可能地进行矢量化 - 以避免 for 循环并i
一次性完成所有操作。我怎样才能做到这一点?
注意:那是 MWE;实际情况具有更大的数组维度,因此我的数组将是A[i,j,k,l]
and B[i,j]
,因此 for 循环示例将类似于下面的代码。我认为额外的维度不会使事情复杂化,但值得一提以防万一。
(N1, N2, N3, N4) = A.shape
for i in range(N1):
for j in range(N2):
C = A[i,j,:,:].flatten()
C = C[C>mythreshold]
B[i,j] = myfunc(C)