【python】numpy学习笔记

来源:互联网 发布:舆情大数据指数 编辑:程序博客网 时间:2024/05/17 10:25

numpy的类型名为ndarray。

基础

  • ndarray.ndim:array的维度
  • ndarray.shape:每个维度的长度
  • ndarray.size:shape各个元素的乘积
  • ndarray.dtype:元素类型
  • ndarray.itemsize:元素字节数

创建

  • a = array( [2,3,4] )

    >>>a
    array([2, 3, 4])

  • c = array( [ [1,2], [3,4] ], dtype=complex )

    >>> c
    array([[ 1.+0.j, 2.+0.j],
    [ 3.+0.j, 4.+0.j]])

  • zeros, zeros_like(a)–跟a同样shape的zero矩阵,ones, empty(随机数)

  • arange( 0, 2, 0.3 ) 无法控制数量

    array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])

  • linspace( 0, 2, 9 ) 更好的控制数量

    array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])

  • reshape: c = arange(24).reshape(2,3,4)

    >>> 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]]]

  • fromfunction()

    >>> def f(i,j):
    … return i**2 + j**2

    >>> fromfunction(f, (3,3)) ———— i取值0,1,2,j取值0,1,2
    array([[0, 1, 4],
    [1, 2, 5],
    [4, 5, 8]])

  • repeat, tile, vstack, hstack, and concatenate
    a = array([[1, 2], [3, 4]])

    repeat(a,3)————每个元素重复三遍
    array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])

tile(a,3)——————matrix重复三遍
array([[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])

基础运算

  1. 元素运算
    + , - , *, / , **, >, < ,sin(), exp()等等。
  2. 矩阵运算
    dot(a,b):矩阵相乘
  3. 统计运算
    矩阵a,a.sum(axis=1), a.max(axis=0), a.min(), a.cumsum(axis=1)
  4. 其他
    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

索引 分片 迭代

  1. 向量数据
    a = arange(10)**3

    >>> a
    array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729])

    >>> a[2]
    8
    >>> a[2:5] ——————第三到第六个元素
    array([ 8, 27, 64])
    >>> a[:6:2] = -1000 ————从开始到第7个元素,2nd的=-1000
    >>> a
    array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729])
    >>> a[ : :-1] ——————逆转a
    array([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000])
    >>> for i in a:
    print i**(1/3.),
    nan 1.0 nan 3.0 nan 5.0 6.0 7.0 8.0 9.0

  2. 多维数据

    >>> def f(x,y):
    … return 10*x+y

    >>> b = fromfunction(f,(5,4),dtype=int)
    >>> b
    array([[ 0, 1, 2, 3],
    [10, 11, 12, 13],
    [20, 21, 22, 23],
    [30, 31, 32, 33],
    [40, 41, 42, 43]])
    >>> b[2,3]
    23
    >>> b[0:5, 1] ———从0行开始,到5行,第2列
    array([ 1, 11, 21, 31, 41])
    >>> b[ : ,1] ————所有行,第2列
    array([ 1, 11, 21, 31, 41])
    >>> b[1:3, : ] —————从第二行开始,到第三行,所有列
    array([[10, 11, 12, 13],
    [20, 21, 22, 23]])
    >>> b[-1] ——————最后一行
    array([40, 41, 42, 43])

c.shape——————(2, 2, 3)
c[1,…] 相当于 c[1,:,:]
c[…,1] 相当于 c[:,:,1]
3. 其他
newaxis, ndenumerate, indices, index exp

shape操作

  • 形状维度改变
    a = floor(10*random.random((3,4)))

    >>> a
    array([[ 7., 5., 9., 3.],
    [ 7., 2., 7., 8.],
    [ 6., 8., 3., 2.]])

    1. a.ravel() ——————拉平,是a的view
    2. a.flatten()——————拉平,是a的copy
      array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.])
    3. a.shape = (6, 2)——————改变形状
    4. a.transpose()——————行转列,列转行

      array([[ 7., 9., 7., 7., 6., 3.],
      [ 5., 3., 2., 8., 8., 2.]])

    5. a.reshape(a形状不变), a.resize(a的形状随之改变)

  • 合并不同array

    >>> a
    array([[ 1., 1.],
    [ 5., 8.]])
    >>> b = floor(10*random.random((2,2)))
    >>> b
    array([[ 3., 3.],
    [ 6., 0.]])
    **>>> vstack((a,b))——————列方向合并,沿第一个维度**
    array([[ 1., 1.],
    [ 5., 8.],
    [ 3., 3.],
    [ 6., 0.]])
    **>>> hstack((a,b))——————行方向合并,沿第二个维度**
    array([[ 1., 1., 3., 3.],
    [ 5., 8., 6., 0.]])
    column-stack 同 vstack,row-stack 同 hstack
    r_[] 和c_[]:沿着某个维度方向生成array
    concatenate((x,y),axis=1)沿指定维度合并

    • 分割array
      hsplit(a,3) 沿横轴将a均分为3个
      hsplit(a,(3,4)) 在第三列和第四列后切割
      vsplit,沿纵轴分割

分割出来的array相当于原array的view,修改slice array会修改原array。
如:

>>> c = a.view()
>>> c is a
False
>>> c.base is a
True
>>> c.flags.owndata
False
>>> c.shape = 2,6 ————a的形状不变
>>> a.shape
(3, 4)
>>> c[0,4] = 1234 ————a的数据随之改变
>>> a
array([[ 0, 1, 2, 3],
[1234, 5, 6, 7],
[ 8, 9, 10, 11]])

indexing

a = arange(12)**2
i = array( [ 1,1,3,8,5 ] )

>>> a[i]
array([ 1, 1, 9, 64, 25])

j = array( [ [ 3, 4], [ 9, 7 ] ] )

>>> a[j]
array([[ 9, 16],
[81, 49]])

B = array([n for n in range(5)])
row_mask = array([True, False, True, False, False])
B[row_mask]

array([0, 2])

mask = (1 < B) * (B < 3)
mask

array([False,False,True,Fales,False],dtype = bool)

B[mask]

array([2])

indices = where(mask) ——————indices转换成位置array
B[indices]

array([2])

**diag——————显示对角线上的元素
diag(A,-1)——————显示对角线前一斜列的元素**

take
A.take(row_indices) 同 A[row_indices]
但是take 也适用于 lists和其他对象。

choose
which = [1, 0, 1, 0]
choices = [[-2,-2,-2,-2], [5,5,5,5]]
choose(which, choices)
从choices的array中选择which。choices的长度应跟which的长度一致。

0 0
原创粉丝点击