数据挖掘 numpy之常用操作

通用函数(ufunc)

NumPy提供常见的数学函数如sin,cos和exp。

在NumPy中,这些叫作“通用函数”(ufunc)。在NumPy里这些函数作用按数组的元素运算,产生一个数组作为输出。

更多函数all, alltrue, any, apply along axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, conjugate, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, inv, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sometrue, sort, std, sum, trace, transpose, var, vdot, vectorize, where 参见:NumPy示例

b = numpy.arange(3)
print(numpy.exp(b))
print(numpy.sin(b))
print(numpy.sqrt(b))
[ 1.          2.71828183  7.3890561 ]
[ 0.          0.84147098  0.90929743]
[ 0.          1.          1.41421356]

索引,切片和迭代

一维数组可以被索引、切片和迭代,就像列表和其它Python序列。

import numpy
a = numpy.arange(10)**3
print(a[2])  # 索引
print(a[2:5])  # 切片
a[:6:2] = 100  # 索引0到6, 步进为2, 对其所有值进行赋值。
print(a)
b = a[::-1]  # 反转倒叙, 不会改变原来的值
print(b)
for i in a:
    print(i**(1/3))
8
[ 8 27 64]
[100   1 100  27 100 125 216 343 512 729]
[729 512 343 216 125 100  27 100   1 100]
4.64158883361
1.0
4.64158883361
3.0
4.64158883361
5.0
6.0
7.0
8.0
9.0

多维数组可以每个轴有一个索引。这些索引由一个逗号分割的元组给出。

fromfunction函数,创建一个数组a,a返回的结果是经过我们自定义的函数F的结果,所以a中存储的是函数F的返回值,而x,y其实就是数组的索引,函数F参数的个数就是其矩阵的轴数;

如下代码所示即是一个二维数组,其中x取值为0到4(5-1),y取值为0-3(4-1),其中x为0轴,y为1轴。

import numpy
def f(x, y):
    return 10*x + y

a = numpy.fromfunction(f, (5, 4), dtype=int)
print(a)
print(a[2, 3])  # 索引
print(a[0:5, 1])  # 切片,表示 0轴的0-4行, 取1轴的索引为1(第二个)的数构成数组
print(a[1:3, :])  # 取0轴 1-3行, 1轴的所有数据构成数组
print(a[-1])  # 当提供少于轴数的索引时,缺失的索引被认为是整个切片
[[ 0  1  2  3]
 [10 11 12 13]
 [20 21 22 23]
 [30 31 32 33]
 [40 41 42 43]]
23
[ 1 11 21 31 41]
[[10 11 12 13]
 [20 21 22 23]]
[40 41 42 43]

b[i]中括号中的表达式被当作i和一系列:,来代表剩下的轴。NumPy也允许你使用“点”像b[i,...]

点(…)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么:

  • x[1,2,…] 等同于 x[1,2,:,:,:],
  • x[…,3] 等同于 x[:,:,:,:,3]
  • x[4,…,5,:] 等同 x[4,:,:,5,:].

迭代多维数组是就第一个轴而言的:

for row in a:
    print(row)   #  输出了五个0轴的数组,即第一个轴
[0 1 2 3]
[10 11 12 13]
[20 21 22 23]
[30 31 32 33]
[40 41 42 43]

对每个数组中元素进行运算,我们可以使用flat属性,该属性是数组元素的一个迭代器:

for elem in a.flat:  # 输出每一个元素
    print(elem)
0
1
2
3
10
11
12
13
20
21
22
23
30
31
32
33
40
41
42
43

更多[], …, newaxis, ndenumerate, indices, index exp 参考NumPy示例

猜你喜欢

转载自my.oschina.net/gain/blog/1798764
今日推荐