几乎所有 numpy 函数都在整个数组上运行,和/或可以被告知在特定轴(行或列)上运行。
只要您可以根据作用于 numpy 数组或数组切片的 numpy 函数来定义函数,您的函数就会自动对整个数组、行或列进行操作。
询问如何实现特定功能以获得更具体的建议可能会更有帮助。
Numpy 提供np.向量化 http://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html and np.frompyfunc http://docs.scipy.org/doc/numpy/reference/generated/numpy.frompyfunc.html将对数字进行操作的 Python 函数转换为对 numpy 数组进行操作的函数。
例如,
def myfunc(a,b):
if (a>b): return a
else: return b
vecfunc = np.vectorize(myfunc)
result=vecfunc([[1,2,3],[5,6,9]],[7,4,5])
print(result)
# [[7 4 5]
# [7 6 9]]
(当第二个数组更大时,第一个数组的元素将被第二个数组的相应元素替换。)
但不要太兴奋;np.vectorize
and np.frompyfunc
are 只是语法糖 http://www.mail-archive.com/numpy-discussion@scipy.org/msg00587.html。它们实际上并没有让你的代码变得更快。如果您的底层 Python 函数一次对一个值进行操作,那么np.vectorize
一次喂它一件东西,然后把整个东西喂给它
操作将会相当慢(与使用调用某些底层 C 或 Fortran 实现的 numpy 函数相比)。
计算列有多少个元素x
小于一个数字y
,您可以使用如下表达式:
(array['x']<y).sum()
例如:
import numpy as np
array=np.arange(6).view([('x',np.int),('y',np.int)])
print(array)
# [(0, 1) (2, 3) (4, 5)]
print(array['x'])
# [0 2 4]
print(array['x']<3)
# [ True True False]
print((array['x']<3).sum())
# 2