我从事C语言编程已经有好几年了,但是我是Python的新手,因此我在下面对我的疑问表示歉意。我已经在互联网上对此进行了研究,但未成功。
我得到了一个巨大的数据集,其中包含几列。我需要处理三个特定的列。我们称它们为DATA,CRITERIA1和CRITERIA2。我把它们每个都当作numpy ndarray。
两个CRITERIA中的元素都是整数;形状=(777777,)和类型= int32 DATA中的元素是复数矩阵;形状=(3,5,777777)和类型= complex128
我将维度777777称为“行号”。
对于满足以下条件的所有行:
((5<CRITERIA1<9) && (CRITERIA2!=7))
对应行的矩阵元素必须乘以(3,2i)。
我可以轻松地使用FOR周期和IF来做到这一点。
但是,有人告诉我Python可以立即执行,而无需FOR和IF。是真的吗?怎么样?
问候!
答案 0 :(得分:1)
尝试np.where()
:
import numpy as np
c1 = np.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
c2 = np.arange(10)+1 # array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
pos = np.where((c1>5) & (c1<9) & (c2!=7))
c1 = c1.astype('complex')
c1[pos] *= np.array([3+2j])
# array([ 0. +0.j, 1. +0.j, 2. +0.j, 3. +0.j, 4. +0.j, 5. +0.j, 6. +0.j, 21.+14.j, 24.+16.j, 9. +0.j])