我最近开始使用NumPy(到目前为止它真的很有用 - 为什么我不早点开始使用它?),但仍然有一些事情我确定我做错了:
如何将函数应用于向量(ndarray)?我希望它是矢量化的,它比复制更复杂。我尝试过使用np.where
,但这似乎是一个丑陋的解决方案(而且我不确定它是否也是矢量化的)。是否有类似于map的函数,以便我的函数可以被矢量化?
假设我有一个二维数组 - 只是一个2d位置向量的数组,并且假设我想找到每个向量的范数,如果它超过某个值,则做任何事情。 np.where
似乎是一个很好的解决方案,但除非我转置数组:np.where(sum(a.T**2) > 10, a * 2, 0)
(只是一个任意的例子)它不会起作用。这真的看起来很冗长,转置没有多大意义。
最后,如果我有一个三维数组 - 二维位置向量的二维数组(这样在位置[1,2]将是向量(1,2))。如何迭代所有向量(使用矢量化函数,如np.where)?我一直在使用np.reshape
,但如果可能的话,我想保持阵列的形状相同。
我将这些问题归为一类,因为它们看似相似,但如果我需要将它们分成不同的主题,请告诉我,我会这样做。
答案 0 :(得分:0)
就像上面的评论一样,我不太清楚你在问什么。但是对于第一个问题,请举个例子:
假设您有一个ndy数组的2d向量,并且您想要计算每个向量的范数。你不能做类似的事情:
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]])