Python:根据条件更改某些矩阵值,而无需FOR循环

时间:2018-09-06 02:37:41

标签: python numpy matrix

我从事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。是真的吗?怎么样?

问候!

1 个答案:

答案 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])