numpy重点

2017-12-10  本文已影响0人  zhouyilian

1 概览

用来处理大型矩阵,运算效率比列表更高效。
轴:维度
秩:轴的个数
如:[[1,0,0],[0,1,2]] ,秩为2,第一个维度长度为2,第二个维度长度为3

ndarray

numpy的数组类,numpy.array 不同于 python库类array.array,后者只处理一维数组

对象属性
import numpy as np
data=[1,2,3,4,5]
array1=np.array(data)
print(array1)
#输出 [1,2,3,4,5]
#array1: array([1,2,3,4,5])

嵌套列表会被转换为一个多维数组,也被称为矩阵

data=[[1,3,4],[2,5,6]]
array=np.array(data)
print(array)
#输出
[[1,3,4],
  [2,5,6]] 
#array([[1,3,4],[2,5,6]])

2 创建数组

array()函数
a=array([2,3,4]):从列表推导来
a=array([(1.5,2,3),(4,5,6)]):从序列包含序列得来

注意:只能由数值组成的列表作为一个参数,错误:b=array(1,2,3)

zero():创建全是0的数组
zero((3,4))
## array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
ones():创建全1的数组
ones((2,3,4),dtype=int16)
##
array([[[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]],

       [[1, 1, 1, 1],
        [1, 1, 1, 1],
        [1, 1, 1, 1]]], dtype=int16)
empty():创建内容随机,默认float型
empty((2,3))
##
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
arrange():创建数列,返回数组而不是列表
arrane(10,30,5)
##输出
array([10,15,20,25)]

3 打印数组

NumPy以类似嵌套列表的形式显示它,但是呈以下布局:

b=arrange(12).reshape(4,3)
print(b)
##
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]

c = arange(24).reshape(2,3,4)         # 3d array
print (c)
[[[ 0  1  2  3]
  [ 4  5  6  7]
  [ 8  9 10 11]]

 [[12 13 14 15]
  [16 17 18 19]
  [20 21 22 23]]]

(注意哦,打印时没有逗号分隔,如果输出对象形式array([])时是有逗号的。。。)

4 基本运算

数组的基本运算是按元素的,比如注意

a=array(20,30,40,50)
a<35
##
array([ True, True, False, False], dtype=bool)

注意: *是指按元素计算,dot()才是矩阵乘法

//*
A=array( [[ 1,1],
                [ 0,1]] )
B=array( [[ 2,0],
                [[3,4])
A*B
array([[ 2,0 ],
            [0,4])
//dot()
dot(A,B)
array([[5, 4],
       [3, 4]])

当运算的是不同类型的数组时,和其它语言一样处理
许多非数组运算,被作为ndarray类的方法实现,如a.sum(), a.min(), a.max(), 它们无关数组的形状,被当作数字组成 的列表。指定axis,可以把运算应用到数组指定的轴上

b = arange(12).reshape(3,4)
b
##
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
b.sum(axis=0) 
##
array([12, 15, 18, 21])

5 通用函数ufunc

数学函数sin,cos,exp等,作用于数组元素,产生一个数组作为输出

6 索引,切片和迭代

http://blog.csdn.net/liangzuojiayi/article/details/51534164

形状操作

由它每个轴上的元素个数给出:

a = floor (10*random.random((3,4)))
a
##
array([[ 6.,  7.,  4.,  3.],
       [ 0.,  0.,  2.,  6.],
       [ 7.,  7.,  8.,  6.]])
a.shape
##
(3,4)

修改

a.ravel() //flatten the array
## array([ 6.,  7.,  4.,  3.,  0.,  0.,  2.,  6.,  7.,  7.,  8.,  6.])
a.shape=(6,2)
a.transpose()
##
array([[ 6.,  4.,  0.,  2.,  7.,  8.],
       [ 7.,  3.,  0.,  6.,  7.,  6.]])
a.resize((2,6))
##
array([[ 6.,  7.,  4.,  3.,  0.,  0.],
       [ 2.,  6.,  7.,  7.,  8.,  6.]])
组合

vstack():纵向合并
hstack():横向合并

分割

hsplit:沿水平轴分割,或返回相同形状数组的个数,或指定在哪些列后发生分割
vsplit:沿纵向轴分割

array([[ 3.,  7.,  0.,  6.,  0.,  6.,  8.,  5.,  8.,  2.,  7.,  1.],
       [ 7.,  7.,  2.,  3.,  4.,  8.,  8.,  5.,  2.,  5.,  5.,  4.]])
hsplit(a,3)
##
[array([[ 3.,  7.,  0.,  6.],
        [ 7.,  7.,  2.,  3.]]), array([[ 0.,  6.,  8.,  5.],
        [ 4.,  8.,  8.,  5.]]), array([[ 8.,  2.,  7.,  1.],
        [ 2.,  5.,  5.,  4.]])]
hsplit(a,(3,4))
##
[array([[ 3.,  7.,  0.],
        [ 7.,  7.,  2.]]), array([[ 6.],
        [ 3.]]), array([[ 0.,  6.,  8.,  5.,  8.,  2.,  7.,  1.],
        [ 4.,  8.,  8.,  5.,  2.,  5.,  5.,  4.]])]

复制和视图

浅复制
赋值:对原数组有影响
视图:不影响

c =  a.view()
c.shape=2,6
a.shape  //shape  doesn't change
##
(3,4)
c[0,4] = 1234
a
##
array([[   0,    1,    2,    3],
       [1234,    5,    6,    7],
       [   8,    9,   10,   11]])  //data change

深复制

d =  a.copy()
d[0,0]=9999
//对a不会有影响
上一篇下一篇

猜你喜欢

热点阅读