【问题标题】:Python: alter some matrix values according to a criteria without FOR cyclesPython:根据没有 FOR 循环的标准更改一些矩阵值
【发布时间】:2018-09-06 02:37:41
【问题描述】:

我已经用 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。是真的吗??怎么样???

您好!

【问题讨论】:

  • 不,python 没有这种魔力...使用 numpy 库,for loops 在 C 级别(编写库的 C 编程语言)抽象,但执行仍然需要迭代这些值,即使它对用户隐藏。例如,如果 xy 是 numpy 数组,您可以在 python 中编写 x + y 来对元素进行成对求和,但是,在 numpy 实现级别,有一个循环遍历数组。跨度>

标签: python numpy matrix


【解决方案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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多