1. 元素级别的函数
元素级别的函数也就是函数对数组中的每一个元素进行运算。例如:
In [10]: arr = np.arange(10) In [11]: np.sqrt(arr)
Out[11]:
array([ 0. , 1. , 1.41421356, 1.73205081, 2. ,
2.23606798, 2.44948974, 2.64575131, 2.82842712, 3. ]) In [12]: np.exp(arr)
Out[12]:
array([ 1.00000000e+00, 2.71828183e+00, 7.38905610e+00,
2.00855369e+01, 5.45981500e+01, 1.48413159e+02,
4.03428793e+02, 1.09663316e+03, 2.98095799e+03,
8.10308393e+03])
一元函数(接受一个数组参数)
二元函数:
2. 数组级别的函数
数组级别的函数一般是一些统计函数,像聚合类的函数求和(sum),求平均(mean)等。
In [16]: arr = np.arange(32).reshape(8,4) In [17]: arr.mean()
Out[17]: 15.5 In [18]: arr.sum()
Out[18]: 496
# 求每一行的平均数
In [19]: arr.mean(axis = 1)
Out[19]: array([ 1.5, 5.5, 9.5, 13.5, 17.5, 21.5, 25.5, 29.5])
# 求每一列的和
In [20]: arr.sum(0)
Out[20]: array([112, 120, 128, 136])
3. 布尔数组的函数
在用上述的函数计算的时候,True为1,False为0,所以:
In [5]: arr
Out[5]:
array([ 0.85760541, -0.41721765, -1.42905838, -0.33368523, 0.4434428 ,
-1.14905993, -1.97609581, -2.00071844, 0.08234022, 0.3282299 ]) In [6]: (arr > 0).sum()
Out[6]: 4 In [7]: type((arr > 0))
Out[7]: numpy.ndarray In [8]: arr > 0
Out[8]: array([ True, False, False, False, True, False, False, False, True, True], dtype=bool)
any() 函数: 只有有一个为True,返回结果为True
all() 函数: 所有值都为True的时候,结果才为True
In [9]: arr_temp = (arr > 0) In [10]: arr_temp
Out[10]: array([ True, False, False, False, True, False, False, False, True, True], dtype=bool) In [11]: arr_temp.any()
Out[11]: True In [12]: arr_temp.all()
Out[12]: False
4. 集合函数
In [17]: arr = np.array([3, 3, 3, 2, 2, 1, 1, 4, 4]) In [18]: np.unique(arr)
Out[18]: array([1, 2, 3, 4])
5. 数据读写函数
Numpy可以将数据保存以及读取文本文件以及二进制文件。
5.1 以二进制方式保存数据
numpy.save 以及 numpy.load 函数可以分别在磁盘上保存和加载数据。 数组默认是以未压缩的原始二进制格式保存在以.npy为后缀名的文件中。
In [25]: arr = np.arange(10)
# 保存arr中的数据
In [26]: np.save("arrays",arr)
# 查看数据
In [27]: !ls -l arrays.npy
-rw-rw-r--. 1 amei amei 160 9月 23 19:03 arrays.npy
# 加载文件中的数据
In [29]: np.load("arrays.npy")
Out[29]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
也可以用 numpy.savez 将多个数组保存到一个压缩的归档文件中,在读取时候可以进行延迟加载
In [31]: np.savez("archive.npz",a = arr, b = arr ) In [32]: !ls -l archive.npz
-rw-rw-r--. 1 amei amei 514 9月 23 19:11 archive.npz In [33]: arch = np.load("archive.npz")
# 根据需要读取数组内容
In [34]: arch["b"]
Out[34]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
5.2 文本文件的读写
暂无。。。
6. 线性代数函数
import numpy.linalg 之后就可以调用以下函数
7. 随机数函数
numpy.random 比 python内嵌的random 提供更多的函数,而且效率更高, 更适合产生数组级别的样本。
下面就是分别测试python自带的和numpy的正太分布产生随机数所用的时间:
# 产生1000000个随机数
In [9]: N = 1000000 In [12]: from random import normalvariate
# numpy.random 中的随机数函数
In [13]: %timeit np.random.normal(size = N)
10 loops, best of 3: 49.7 ms per loop
# python 自带的随机数函数
In [14]: %timeit samples = [ normalvariate(0,1) for _ in xrange(N)]
1 loop, best of 3: 1.23 s per loop
numpy.random 中的函数
# numpy.random 中的随机数函数