基本上我有1000多个3D阵列 (100,100,1000) . 所以一些非常大的数组,我需要在一些计算中使用。python和Numpy最大的优点是,对每个元素的计算可以非常快速地完成,而不是相互作用。例如,我可以让每个3D数组的每个索引几乎立即相加。结果是一个大数组,每个数组的每个索引之和。原则上,这几乎是我想做的,但是,有一点问题。
(100,100,1000)
我需要做的是使用这样一个等式:
如前所述,我有大约1000个3D阵列。总的来说,这个数组的形状是 (1000, 100, 100, 1000) . 对于1000个数组中的每一个,我也有一个从1到1000的对应于1000个3D数组的列表,该列表的每个索引包含 1 或者 0 . 如果它有 一 索引的整个3D数组应该在方程的第一项中,如果 零 ,它进入另一个。
(1000, 100, 100, 1000)
1
0
一
零
然而,我非常怀疑,我将如何做到这一点,而不转向某种循环,可能会破坏计算的速度很大。
你可以通过定位1和0来进行排序。 类似于:
list_ones = np.where(Array[0] == 1) list_zeros = np.where(Array[0] == 0)
那么 Array[list_ones,:,:,:] 将包含与一和 Array[list_zeros,:,:,:] 将对应于与零对应的所有元素。
Array[list_ones,:,:,:]
Array[list_zeros,:,:,:]
然后你就可以
first_term = Array[list_ones,:,:,:] second_term = Array[list_zeros,:,:,:]
并酌情加总。
这对你有用吗?