【问题标题】:Numpy: manipulate elements depending on the value without looping over the entire arrayNumpy:根据值操作元素而不循环整个数组
【发布时间】:2020-08-23 14:14:57
【问题描述】:

我有一个 numpy 数组 x,我想根据 x 的值对 x 的元素执行操作。例如,假设我想对所有负元素取平方,对所有其他元素取四次方。以下代码可以解决问题

import numpy as np
x = np.array([-2,-1,0,1,2,3])
y = np.zeros(len(x))

for i in range(len(x)):
    if x[i]<0:
        y[i] = np.square(x[i])
    else:
        y[i] = np.power(x[i],4)

print(y)

由于我要处理大型数组并多次执行此操作,因此我正在寻找一种无需循环遍历所有元素的方法。

【问题讨论】:

  • 你必须学习numpy及其方法和ufuncs。正如答案所示,有一些工具可以将各种数学运算应用于整个数组 - 平方、幂、乘法等。没有一个神奇的函数可以进行迭代计算,并将其转化为编译的。跨度>

标签: numpy if-statement boolean


【解决方案1】:

试试这个

import numpy as np
x = np.array([-2,-1,0,1,2,3])
mask1 = np.clip(x,0,None)
mask1 = np.power(mask1,4)
mask2 = np.clip(x,None,0)
mask2 = np.power(mask2,2)
res = mask1+mask2

输出

array([ 4,  1,  0,  1, 16, 81], dtype=int32)

【讨论】:

  • 感谢您的回答!这适用于这个非常具体的示例,但如果我需要更复杂的条件和操作,例如将 cos(x)*exp(-x^2) 用于 x^2-7x+8>0 并采用 x^3+ 8 否则?
  • 你能解释一下吗?我回答了你的问题
【解决方案2】:

一般

mask = x<0
y[mask] = fn1(x[mask])
mask =~mask
y[mask] = fn2(x[mask])

掩码测试和 fn 是为使用数组而编写的。

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多