机器学习实战 -- Numpy使用

宁静致远
8个月前 阅读 326 点赞 2

导入numpy 并简单赋值​

import numpy as np

a = np.array([0, 1, 2, 3, 4, 5])
print a
# 数组转换到2D矩阵 变成三行两列
b = a.reshape((3, 2))
print b
# .ndim(空间维度的意思)即矩阵列数
print a.ndim
print b.ndim
# .shape查看矩阵形态,即几行几列
print b.shape
# numpy避免复制操作 直接修改值,a,b的值都变化
b[1][0] = 77
print b, a
# 结果为
# [[ 0 1]
# [77  3]
# [ 4  5]] [ 0  1 77  3  4  5]
# 需要一个复本,使用.copy(),这里c和a是完全独立的副本
c = a.reshape((3, 2)).copy()
c[0][0] = 99
print c

对数组操作的传递

a=np.array([1,2,3,4,5])
# 对数组操作的传递
print a*2
print a**2
# [  0   2  4   6   8  10]
# [   0    1  4    9   16   25]

# python list集的操作
print [1,2,3,4,5]*2
print [1,2,3,4,5]**2
# [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
# TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'

numpy的索引

# 将数组本身作为数组索引使用
# 显示数组a的第2,3,4个值
print a[np.array([2, 3, 4])]
# [77,3,4]
# 判断条件传递到每一个参数
print a>4
# [False False  True False False  True]
# 存储判断结果
print a[a>4]
# [77  5]
# 修剪异常值,大于4的值置为4
a[a>4] = 4
print a
# [0 1 4 3 4 4]

专门的修剪函数

# clip修剪,将超出边界的值用边界替代
a = np.array([11,22,33,1,2,3,-1])
print a.clip(0, 4)
# [4 4 4 1 2 3 0]

处理不存在的值

对于包含的不合法的值,使用numpy.NAN做标记

# 模拟一个数据
c = np.array([1, 2, np.NAN, 4, 5, 6, 7])
print c
# [  1.   2.  nan   4.   5.   6.   7.]
# 注意后面有个.号

判断是否是无效值

print np.isnan(c)
# [False False  True False False False False]
# 注意该方法的调用
# 筛选有效数据
print c[~np.isnan(c)]

# mean 求算数平均值,axis是轴 0算是x轴 1算是y轴 考虑x=1 y=2;x=3 y=4
>>> a = np.array([[1, 2], [3, 4]])
>>> np.mean(a)
2.5
>>> np.mean(a, axis=0)
array([ 2.,  3.])
>>> np.mean(a, axis=1)
array([ 1.5,  3.5])

运行时间比较

normal_py_src = timeit.timeit('sum(x*x for x in xrange(1000))', number=10000)
native_np_src = timeit.timeit('sum(na*na)', setup="import numpy as np; na=np.arange(10000)",
                              number=10000)
good_np_src = timeit.timeit('na.dot(na)', setup="import numpy as np; na=np.arange(10000)",
                              number=10000)

print("normal python:%f sec"%normal_py_src)
print("Naive Numpy:%f sec"%native_np_src)
print("Good py:%f sec"%good_np_src)

#normal python:0.820022 sec
#Naive Numpy:52.690701 sec
#Good py:0.098299 sec
#python 中访问个体数组元素是相当耗时的


| 2
评论 ( {{ comments.total }} )

还没有人发表评论...

{{ o.content }}
赞 {{ o.likes_count ? o.likes_count : '' }} 回复 {{ o.created_at }}