crossain

导航

numpy常用指令大全

​ 最近在自学numpy,从网上找了视频来看,感觉numpy的指令很多,怕记不清所以统一贴出来方便查阅。

import numpy as np 导入numpy模块,一般简写为np

array = np.array([[1,2,3],[2,3,4]])

numpy的属性

print(array) 打印出数组

print("number of dim:",array.ndim) 判断数组是几维的(一维二维等等)

print("shape:",array.shape)判断数组的形状

print("size:"array.size)判断数组的大小

numpy的创建array

array = np.array([[1,2,3],[2,3,4]]简单创建(注意下打印出来之后没有中间,号)

array = np.array([[1,2,3],dtype=np.int)

print(array.dtype) dtype设定数组中的格式,一般有int,float等等,默认的是64位的,如果要32位的改成int32,通常来说位数越小占用空间越小,一般保留64位

a = np.zeros((5))

a = np.nes((5))

a = np.empty(([3,4])) 常见的全0全1全空数组

a=np.arange(10,20,2).reshape((3,4)) 生成从10到20步长为2的整数数组(不包括20,10位置默认为0),并重新变为3行4列的数组格式

a = np.linespace(1,10,20)生成线段,20是生成线段的份数

numpy基础运算

a=np.array([10,20,30,40])

b=np.arange(4)生成从0到3的数组

常规的加减乘除,即+-*/都是对应位直接做计算得到结果,当运用单一矩阵乘方的时候遵循Python的规则用**,三角函数需要调用,例如c=np.sin(a).判断可以直接把条件加到括号里,如print(b<3)。二维的矩阵乘法运算(从线性代数角度来说)如下:

c_dot=np.dot(a,b)

或者

c_dot_2=a.dot(b)

随机生成一个array,每个元素都是0到1之间的随机数,需要制定形状:

a = np.random.random((2,4))

np.sum(a,axis=1)求和,axis=1是对每一列中找,axis=0是对每一行中找,会针对每一行(列)中分别查找计算

np.min(a)求最小值

np.max(a)求最大值

np.argmin(a)求最小值的索引

np.argmax(a)求最大值的索引

np.mean(a)求平均值

np.median(a)求中位数

np.cumsum(a)是一个累加的过程,逐步的加进去,显示出累加的每一步

np.diff(a)累差,就是每个元素和之前的差

np.nonzero(a)找出非0的数并将它们的索引列出来

np.sort(a)排序

np,transpose(a)矩阵反向,行列互换并且倒序

np.clip(a,3,5)截取,a中所有小于3的让他为3,大于5的让他为5,中间的不变

numpy的索引

A=np.arange(3,15).reshape((3,4))

print(A[3])类似于python,对一维来说是直接访问对应索引,对二维来说单索引访问的是对应的行,双索引才是对应的单个元素如,print(A[2][1])print(A[2,1])是一样的,print(A[2,:])代表第二行的所有数,print(A[1,1:3])第二行从1到3的数即8和9

for循环:

for row in A:

print(row) 迭代行

for column in A.T(就是前面的transpose):

print(column) 迭代列

A.flatten() 变平

a.ravel()  # returns the array, flattened

for item in A.flat:

print(item) 迭代项目,flat是上面的迭代器

numpy array合并

A = np.array([1,1,1])

B = np.array([2.2.2])

C = print(np.vstack((A,B))) vertical stack上下的合并

D = print(np.hstack((A,B))) horizontal stack 左右的合并

!--print(A[np.newaxis,:])--给A加了一个维度。?

E = np.concatenate((A,B,B),axis=0)多个array的合并,axis=0在上下维度进行合并

numpy array分割

A = np.arange(12).reshape((3,4))

print(np.spilt(A,2,axis=1)) 将A纵向平均分成2份(注意spilt中列数必须能被2整除),axis=0是横向分割

print(np.array_spilt(A,2,axis=1))``不等量分割

print(np.vspilt(A,3))

print(np.vspilt(A,3)) 同上面的合并

numpy array的复制和深度复制(copy&deep copy)

视频里讲的很简略,所以这边把官方文档转过来。

有三种情况:

#完全不复制

简单赋值不会创建数组对象或其数据的拷贝。

>>> a = np.arange(12)
>>> b = a            # no new object is created
>>> b is a           # a and b are two names for the same ndarray object
True
>>> b.shape = 3,4    # changes the shape of a
>>> a.shape
(3, 4)

Python将可变对象作为引用传递,所以函数调用不会复制。

>>> def f(x):
...     print(id(x))
...
>>> id(a)                           # id is a unique identifier of an object
148293216
>>> f(a)
148293216

#视图或浅复制

不同的数组对象可以共享相同的数据。 view 方法创建一个新的数组对象,它查看相同的数据。

>>> c = a.view()
>>> c is a
False
>>> c.base is a                        # c is a view of the data owned by a
True
>>> c.flags.owndata
False
>>>
>>> c.shape = 2,6                      # a's shape doesn't change
>>> a.shape
(3, 4)
>>> c[0,4] = 1234                      # a's data changes
>>> a
array([[   0,    1,    2,    3],
       [1234,    5,    6,    7],
       [   8,    9,   10,   11]])

对数组切片返回一个视图:

>>> s = a[ : , 1:3]     # spaces added for clarity; could also be written "s = a[:,1:3]"
>>> s[:] = 10           # s[:] is a view of s. Note the difference between s=10 and s[:]=10
>>> a
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])

深拷贝

copy 方法生成数组及其数据的完整拷贝。

>>> d = a.copy()                          # a new array object with new data is created
>>> d is a
False
>>> d.base is a                           # d doesn't share anything with a
False
>>> d[0,0] = 9999
>>> a
array([[   0,   10,   10,    3],
       [1234,   10,   10,    7],
       [   8,   10,   10,   11]])

#函数和方法概述

这里列出了一些根据类别排列的有用的NumPy函数和方法名称。完整列表见Routines。

  1. 数组创建

    arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros, zeros_like

  2. 转换

    ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat

  3. 手法

    array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack

  4. 问题

    all, any, nonzero, where

  5. 顺序

    argmax, argmin, argsort, max, min, ptp, searchsorted, sort

  6. 操作

    choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum

  7. 基本统计

    cov, mean, std, var

  8. 基本线性代数

    cross, dot, outer, linalg.svd, vdot

posted on 2019-07-21 22:00  crossain  阅读(2861)  评论(0编辑  收藏  举报