Python NumPy矢量化函数
我最近开始使用NumPy(到目前为止它确实很有用——为什么我不早点开始使用它呢?),但我确信仍有一些事情我做错了:Python NumPy矢量化函数,python,numpy,vectorization,Python,Numpy,Vectorization,我最近开始使用NumPy(到目前为止它确实很有用——为什么我不早点开始使用它呢?),但我确信仍有一些事情我做错了: 如何将函数应用于向量(ndarray)?我希望它是矢量化的,它是一个比乘法更复杂的函数。我尝试过使用np.where,但这似乎是一个丑陋的解决方案(我不确定它是否也矢量化了)。有没有类似于map的函数,这样我的函数就可以矢量化了 假设我有一个二维数组——一个二维位置向量的数组,假设我想找到每个向量的范数,如果它超过某个值,做任何事情np.where似乎是一个很好的解决方案,但除非
- 如何将函数应用于向量(ndarray)?我希望它是矢量化的,它是一个比乘法更复杂的函数。我尝试过使用
,但这似乎是一个丑陋的解决方案(我不确定它是否也矢量化了)。有没有类似于map的函数,这样我的函数就可以矢量化了np.where
- 假设我有一个二维数组——一个二维位置向量的数组,假设我想找到每个向量的范数,如果它超过某个值,做任何事情
似乎是一个很好的解决方案,但除非我转置数组:np.where
(只是一个任意示例)。这看起来很冗长,转置也没有多大意义np.where(sum(a.t**2)>10,a*2,0)
- 最后,如果我有一个三维数组-一个二维位置向量的二维数组(这样在位置[1,2]处就是向量(1,2))。如何迭代所有向量(使用向量化函数,如np.where)?我一直在使用
,但如果可能的话,我想保持数组的形状不变np.reformate
我将这些问题组合在一起,因为它们看起来很相似,但如果我需要将它们分成不同的线程,请让我知道,我会这样做 像上面的评论一样,我不太确定你在问什么。但对于第一个问题,以这个例子: 假设你有一个二维向量的numpy数组,你想计算每个向量的范数。你不能做一些类似于:
import numpy as np
x = np.arange(20).reshape(10,2)
norm_func = lambda z: sum(z**2)
norm_func(x.T)
这将给出结果
array([ 1, 5, 9, 13, 17, 21, 25, 29, 33, 37])
对于数组
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11],
[12, 13],
[14, 15],
[16, 17],
[18, 19]])
虽然有一些方法可以完成您描述的事情,但您可能会检查哪些设置可以处理这些操作。您的第一个问题是什么意思?显然,您可以将多个算术运算符和其他运算符链接在一起,以构建更大的函数。否则,如果你想矢量化你的函数,你需要使用C或Fortran(或Cython),因为numpy无法绕过对每个元素调用函数的开销?(只是一个例子,我不会只是总结一下)。我仍然不清楚你在问什么。您应该发布一些输入和输出示例,以演示您的意思。另外,我真的建议你先看看熊猫,因为它们可能会让你找到一个可行的解决方案(而且只需要很少的努力)。