参考链接: Python中的numpy.diag_indices

Numpy(Numerical Python)是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等,其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,numpy支持向量处理ndarray对象,提高程序运算速度。 一、安装

下载      pip install numpy

arange函数测试环境安装      import numpy as np

a = np.arange(10)

print(a)

实例:  # 检测numpy模块是否安装成功

#导入numpy

import numpy as np

# 创建数组

a = np.arange(10)

print(a)

print(type(a))

# 对ndarray对象类进行向量处理

print(np.sqrt(a))

# 对列表中的元素开平方

import math

b = [3, 4, 9]

# 定义存储开平方的结果的列表

result = []

# 遍历列表

for i in b:

result.append(math.sqrt(i))

print(result)

结果:

[0 1 2 3 4 5 6 7 8 9]

<class 'numpy.ndarray'>

[0.         1.         1.41421356 1.73205081 2.         2.23606798

2.44948974 2.64575131 2.82842712 3.        ]

[1.7320508075688772, 2.0, 3.0]

二、数组的创建 (一)ndarray创建

numpy模块的array函数可以生成多为数组。例如,如果要生成一个二维数组,需要向array函数传递一个列表类型的参数。每一个列表元素是一维的ndarray类型数组,作为二维数组的行。另外,通过ndarray类的shape属性可以获取的数组没一维的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是维度,从0开始。  语法格式如下: numpy.array(object, type = None, opy = True, order= None, subok = False, ndmin = 0) 实例:  # 使用array创建数组

import numpy as np

# 使用array函数创建一维数组

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

print(a)

print(type(a))

# 使用array函数创建二维数组

b = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

print(b)

print(type(b))

# 使用array函数创建三维数组

c = np.array([[[1, 2, 3], [4, 5 ,6], [7, 8, 9]]])

print(c)

print(type(c))

# array函数中dtype的使用

d = np.array([3, 4, 5], dtype=float)

print(d)

print(type(d))

# array函数中ndmin的使用

e = np.array([5, 6, 7], dtype=float, ndmin=3)

print(e)

print(type(e))

结果:

[1 2 3 4]

<class 'numpy.ndarray'>

[[1 2 3]

[4 5 6]

[7 8 9]]

<class 'numpy.ndarray'>

[[[1 2 3]

[4 5 6]

[7 8 9]]]

<class 'numpy.ndarray'>

[3. 4. 5.]

<class 'numpy.ndarray'>

[[[5. 6. 7.]]]

<class 'numpy.ndarray'>

(二)arange创建 使用arange函数创建数值范围并返回ndarray对象,函数格式如下: numpy.arange(start,stop,step,dtype) 参数说明: start:起始值,默认为0 stop:终止值(不包含) step:步长,默认为1 dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。 实例:

# 使用arange创建数组

import numpy as np

# range的使用

# 格式:range(start, end, step)

a = list(range(1, 10))

print(a)

b = list(range(10))     # 默认从0开始,步长为1

print(b)

c = list(range(1, 10, 3))

print(c)

# arange创建数组

# 使用arange创建1-10的数组

a = np.arange(1, 11)

print(a)

# 设置步长

b = np.arange(1, 11, 2)

print(b)

# 设置dtype

c = np.arange(10, 20, 2, dtype=float)

print(c)

结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9]

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 4, 7]

[ 1  2  3  4  5  6  7  8  9 10]

[1 3 5 7 9]

[10. 12. 14. 16. 18.]

(三)随机数创建 1.随机数 格式: numpy.random.random(size=None) **:该方法返回[0.0,1.0)范围(不包括1.0)的随机数 2.随机整数 格式: numpy.random.randint(size=None) 3.正态分布创建 格式: numpy.random.randn(d0,d1,…,dn) **:randn函数返回一个或一组样本,具有标准正态分布(期望为0,方差为1)。 **:dn表示每个维度 **:返回值为指定维度的array 4.指定期望和方差的正态分布 格式: np.random.normal(loc=3, scale=4, size=(2, 2, 3)) **:loc指的是期望 **:scale指的是方差

**:scale值得是形状 5.实例

# 使用随机数创建数组

import numpy as np

def randomTest():

# 使用random创建一维数组[0.0,1.0)

a = np.random.random(size=5)

print(a)

print(type(a))

# 使用random创建二维数组

b = np.random.random(size=(3, 4))

print(b)

# 使用random创建三维数组

c = np.random.random(size=(2, 3, 4))

print(c)

# 随机整数

def randomintTest():

# 生成0-5之间的随机整数 一维

a = np.random.randint(6, size=10)

print(a)

print(type(a))

# 生成5-10之间的随机整数 二维

b = np.random.randint(5, 11, size=(4, 3))   # 4行,3列

print(b)

# 生成5-10之间的随机整数 三维 类型是float

c = np.random.randint(5, 11, size=(2, 4, 3))

print(c)

# dtype的使用

d = np.random.randint(10, size=5)

e = np.random.randint(10, size=5, dtype=np.int64)

print(d)

print("默认的dtype:", d.dtype)

print(e)

print(e.dtype)

# 创建标准的正态分布,期望为0,方差为1

def randnTest():

# 创建一维的数组

a = np.random.randn(4)

print(a)

# 创建二维的数组

b = np.random.randn(2, 3)

print(b)

# 创建三维的数组

c = np.random.randn(2, 3, 4)

print(c)

# 创建指定期望和方差的正态分布

def normalTest():

# 创建一维的数组

a = np.random.normal(size=5)        # 默认的期望为loc=0.0,方差为scale=1.0

print(a)

# 指定期望和方差

b = np.random.normal(loc=2, scale=3, size=(3, 4))

print(b)

# 调用

randomTest()

randomintTest()

randnTest()

normalTest()

结果: [0.00887871 0.4883434 0.72720418 0.0257879 0.66400966] <class ‘numpy.ndarray’> [[0.80626343 0.04400455 0.2986314 0.66142317] [0.0650796 0.85620716 0.57766227 0.82419107] [0.73019529 0.34526167 0.29803899 0.32255487]] [[[0.06509948 0.73713829 0.58142333 0.94420827] [0.16305815 0.1161842 0.10169585 0.72676126] [0.51880714 0.67523324 0.29094012 0.18410173]]

[[0.43639801 0.35702054 0.29011569 0.2185009 ] [0.36398544 0.13855232 0.40134422 0.33418168] [0.3505151 0.36577903 0.77489606 0.42576565]]] [2 0 3 4 1 1 2 5 2 1] <class ‘numpy.ndarray’> [[9 9 5] [5 8 7] [8 6 8] [8 6 5]] [[[ 6 8 6] [ 8 9 5] [ 7 5 7] [ 9 8 10]]

[[ 6 5 10] [ 8 10 7] [ 8 8 8] [ 7 7 10]]] [5 3 0 0 2] 默认的dtype: int32 [5 5 9 6 6] int64 [-0.23866284 0.23478967 -0.38209161 -1.60741968] [[ 0.45665471 1.04515999 2.18564104] [ 0.36926156 -1.22813598 1.81815474]] [[[-0.51920682 -0.51882073 -0.81129845 1.15124702] [-0.52116354 0.83305686 0.2138335 0.37131654] [-0.64401734 -0.00270473 -0.12067361 0.12967186]]

[[-0.49077761 -0.28641974 -1.33340765 -1.25872418] [-0.35756181 0.54253329 0.26528788 -2.05927852] [-0.35854858 -1.19597616 1.08397876 0.57458846]]] [ 1.42082121 -0.39749285 -0.02228479 -0.11973206 -0.44311544] [[-0.50039039 1.16596752 -3.77042349 7.68638701] [ 5.54881318 -0.49415854 1.39904551 2.06171095] [ 4.53210342 3.62484592 4.05214766 2.81165569]]

(四)ndarray对象 numpy最重要的一个特点是其N为数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。 ndarray对象用于存放同类型元素的多维数组。 ndarray中的每个元素在内存中都有相同存储大小的区域。 ndarray内部由以下内容组成: *:一个指向数据(内存或内存映射文件中的一块数据)的指针。 *:数据类型或dtype,描述在数组中的固定大小值得格子。 :一个表示数组形状(shape)的元组,表示各维度大小的元组。 numpy的数组中比较重要的ndarray对象属性有: 属性 说明 ndarray.ndim 秩,即轴的数量或者维度的数量 ndarray.shape 数组的维度,对于矩阵,n行m列 ndarray.size 数组元素的总个数,相当于.shape中nm的值 ndarray.dtype ndarray对象的元素类型 ndarray.itemsize ndarray对象中每个元素的大小,以字节为单位 ndarray.flags ndarray对象的内存信息 ndarray.real ndarray元素的实部 ndarray.imag ndarray元素的虚部 ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以不经常使用该属性。

ndarray属性测试:

# ndarray对象属性的测试

import numpy as np

# 创建一个一维的数组

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

print(a)

# 创建一个二维数组

b = np.random.randint(4, 10, size=(2, 3))

print(b)

# 创建一个三维数组

c = np.random.randn(2, 3, 4)

print(c)

""" 测试ndarray对象的属性:"""

# ndim属性:即维数

print("ndim:", a.ndim, b.ndim, c.ndim)

# shape属性:即几行几列

print("shape:", a.shape, b.shape, c.shape)

# detype属性:即元素类型

print("dtype:", a.dtype, b.dtype, c.dtype)

# size属性:即元素总个数

print("size:", a.size, b.size, c.size)

# itemsize属性:即每个元素所占的字节

print("itemsize:", a.itemsize, b.itemsize, c.itemsize)

结果: [1 2 3 4] [[4 7 4] [5 6 9]] [[[-0.54635725 1.88540886 0.50879426 0.42969525] [ 0.4408512 -0.94579501 0.3515534 -0.46914832] [-0.26425155 -1.17787095 1.47276565 0.97897996]]

[[ 0.83050746 -2.00538815 0.56553153 1.92790238] [ 0.42562037 0.62955486 0.05341378 1.27225038] [-0.25547714 -0.23791881 -0.05161476 0.30138231]]] ndim: 1 2 3 shape: (4,) (2, 3) (2, 3, 4) dtype: int32 int32 float64 size: 4 6 24 itemsize: 4 4 8

(五)其他方式创建 ndarray数组除了可以使用底层ndarray构造器来创建外,也可以通过以下几种方式来创建。 1.zeros创建指定大小的数组,数组元素以0来填充。 格式: numpy.zeros(shape, dtype=float, order=”C”) 2.ones创建指定形状的数组,数组元素以1来填充。 格式: numpy.ones(shape, dtype=None, order=”C”) 3.empty创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存的值: 格式: numpy.empty(shape, dtype=float, order=’C’) :order:有“C”和“F”两个选项,分别代表,行优先和列优先,在计算机内存中的存储元素的顺序。 4.linspace创建等差数列 格式: numpy.linspace(10, 20, 5, endpoint=True) :endpoint表示结束值是包括的,一般设为true 5.logspace创建等比数列 格式: numpy.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None) *:start表示序列的起始值为:basestart *:stop表示序列的终止值为basestop。如果endpoint为True,则该数值包含于数列中。 *:num表示要生成等步长的数量,默认为50 *:endpoint表示结束值是包括的,一般设为true *:base表示对数log的底数,默认为10.0 6.实例

# 其它方式创建数组

import numpy as np

# 使用zeros创建

def zerosTest():

# 创建一维数组

a = np.zeros(5)

print(a)

# 指定类型

b = np.zeros((5,), dtype=int)

print(b)

# 创建二维数组

c = np.zeros((3, 4))

print(c)

# 使用ones创建

def onesTest():

# 创建一维数组

a = np.ones(10)

print(a)

# 指定类型

b = np.ones((2,), dtype=int)

print(b)

# 创建二维数组

c = np.ones((3, 5))

print(c)

# 使用empty创建

def emptyTest():

# 创建一维数组

a = np.empty(8)

print(a)

# 指定类型

b = np.empty((4,), dtype=int)

print(b)

# 创建二维数组

c = np.empty((2, 7))

print(c)

# 使用linspace创建

def linspaceTest():

# 创建一维数组

a = np.linspace(1, 10, 10)

print(a)

# endpoint属性

b = np.linspace(5, 20, 5, endpoint=True)

print(b)

c = np.linspace(5, 20, 5, endpoint=False)

print(c)

# 使用logspace创建

def logspaceTest():

# 创建一维数组

a = np.logspace(0, 9, 20, base=2)

print(a)

onesTest()

emptyTest()

linspaceTest()

logspaceTest()

结果: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.] [1 1] [[1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.] [1. 1. 1. 1. 1.]] [0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000 0.00000000e+000 3.33988377e-321 2.00543404e-303 4.80462287e-310] [ -639076892 2129428073 1829042667 -1153726075] [[6.23042070e-307 4.67296746e-307 1.69121096e-306 4.45038538e-307 1.42419938e-306 7.56603881e-307 8.45603440e-307] [3.56043054e-307 1.60219306e-306 6.23059726e-307 1.06811422e-306 3.56043054e-307 1.37961641e-306 6.23039354e-307]] [ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] [ 5. 8.75 12.5 16.25 20. ] [ 5. 8. 11. 14. 17.] [ 1. 1.38865114 1.928352 2.6778082 3.71854142 5.16375679 7.17065677 9.95754072 13.82755029 19.20164351 26.6643842 37.02752759 51.4183185 71.40210674 99.15261711 137.68839504 191.20114709 265.51169138 368.70311361 512. ] 三、数组的切片和索引 ndarray对象的内容可以通过索引或切片来访问和修改,与Python中list的切片操作一样。 ndarray数组可以基于0-n的下标进行索引,并设置start,stop及step参数进行,从原数组中切割出一个新数组。 (一)一维数组切片和索引的使用

# 一维数组的切片和索引

import numpy as np

# 创建一维数组

a = np.arange(10)

print(a)

# 索引访问,索引从0开始,长度-1

print("索引0处的元素:", a[0])

print("索引5处的元素:", a[6])

# 负索引 倒数第一个的索引为-1

print("访问最后一个元素:", a[-1])

print("访问倒数第三个元素:", a[-3])

# 切片操作 [start:stop:step]

print(a[:])         # 从开始到结尾

print(a[3:])        # 从索引3开始到结尾

print(a[3:5])       # 从索引3开始到索引4[start,stop]结尾

print(a[1:7:2])     # 从索引1开始到索引6[start,stop]结尾,步长为2

# 切片中负索引操作

print(a[::-1])      # 反向获取

print(a[-5:-2])

(二)二维数组的切片和索引的使用

# 二维数组的切片和索引、使用坐标获取元素

import numpy as np

# 创建一维数组

a = np.arange(1, 13)

print(a)

# 对一位数组进行修改它的形状 (4, 3)

a = a.reshape((4, 3))

print(a)

# 索引的使用

# 获取第三行

print(a[2])

# 获取对二行第三列

print(a[1][2])

# 切片的使用 [行进行切片,列进行切片]    [start:stop:step,start:stop:step]

# 获取所有行所有列

print(a[:, :])

# 获取所有行部分列,所有行第二列

print(a[:, 1])

# 获取所有行部分列,所有行第1,2列

print(a[:, 0:2])

# 获取所有列部分行,获取奇数行所有列

print(a[::2, :])

# 获取部分行部分列,获取奇数行,第1,2列

print(a[::2, 0:2])

(三)使用坐标获取元素

# 坐标获取  [行,列]

# 获取第二行第三列的元素

print(a[1][2])

print(a[1, 2])

# 同时获取不同行不同列,获取第二行第三列,第三行第一列

print(a[1, 2], a[2][0])

print(np.array([a[1, 2], a[2][0]]))

# 使用坐标

print(a[(1, 2), (2, 0)])

(四)索引为负数来获取

# 负索引的使用

print("最后一行")

print(a[-1])

print("行倒序")

print(a[::-1])

print("行列倒序")

print(a[::-1, ::-1])

(五)数组的复制

# 数组的复制

import numpy as np

# 创建一个二维的数组

a = np.arange(1, 13).reshape((3, 4))

print(a)

# 对a数组进行切片处理,获取第一、二行,第一、二列

sub_a = a[::2, ::2]

print(sub_a)

# 对sub_a中的第一行第一列的值进行修改

sub_a[0][0] = 100

print(sub_a)

print(a)

# 通过切片可以获取到新数组,即使复制给新的变量,但还是原来数组的视图。

# 如果对切片数组中元素的值进行修改,会影响原来数组

# 可以使用numpy中的copy方法实现【深拷贝】

sub_aa = np.copy(a[::2, ::2])

sub_aa[0, 0] = 200

print(sub_aa)

print(a)

(六)修改数组维度

# 修改数组维度

import numpy as np

# 通过reshape将一维数组修改为二维、三维

# 创建一个一维数组

a = np.arange(1, 25)

print(a)

# 将一维修改为二维  (2, 12) (4, 6) (3 ,8)

b = a.reshape(4, 6)

c = a.reshape((3, 8))

print(b)

print(c)

# 将一维修改为三维  (2, 3, 4)

d = a.reshape((2, 3, 4))

print(d)

# 通过np.reshape()进行修改

bb = np.reshape(a, (3, 8))    # 将一维修改为二维

print(bb)

cc = np.reshape(a, (4, 3, 2))    # 将一维修改为三维

print(cc)

# 将多维数组修改为一维数组

a = cc.reshape(24)

print(a)

# 类似于

b = cc.reshape(-1)

print(b)

# 通过ravel、flatten函数将多维数组转换为一维数组

# ravel

a = bb.ravel()

print(a)

# flatten

a = bb.flatten()

print(a)

(七)数组的拼接 函数 描述 concatenate 连接沿现有轴的数组序列 hstack 水平堆叠序列中的数组(列方向) vstack 数值堆叠序列中的数组(行方向)

1.水平数组组合: 通过hstack函数可以将两个或多个数组结合起来形成一个数组。 数组A 0 1 2f 3 4 5 数组B 6 7 8 9 10 11 使用hstack函数将两个数组水平组合代码如下: hstack(A,B) 返回的结果: 1 1 2f 6 7 8 3 4 5 9 10 11

# 水平数组组合

import numpy as np

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

b = np.array([[11, 12, 13], [14, 15, 16]])

print(a)

print(b)

# 使用hstack进行水平拼接

# r = np.hstack([a, b])

r = np.hstack((a, b))

print(r)

2.垂直数组组合: 通过vstack函数可以将两个或多个数组垂直起来形成一个数组 数组A 2 1 2f 3 4 5 数组B 6 7 8 9 10 11 使用vstack函数将两个数组水平组合代码如下: vstack(A,B) 返回的结果: 3 1 2f 3 4 5 6 7 8 9 10 11

# 垂直数组组合

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

b1 = np.array([[11, 12, 13], [14, 15, 16]])

print(a1)

print(b1)

# 使用vstack进行水平拼接

# r = np.vstack([a, b])

r1 = np.vstack((a, b))

print(r)

3.Concatenate numpy.concatenate函数用于沿指定轴连接相同形状的两个或多个数组,格式如下: numpy.concatenate((a1, a2, …), axis) 参数说明: a1, a2, …:相同类型的数组 axis:沿着它连接数组的轴,默认为0

# concatenate的使用

print("axis=0 默认情况  垂直方向拼接  相当于vstack")

r2 = np.concatenate((a, b), axis=0)

r3 = np.concatenate((a, b))

print(r2)

print(r3)

# 二维数组有两个轴

# axis=0,axis=1

print("axis=0 默认情况  水平方向拼接  相当于hstack")

r4 = np.concatenate((a, b), axis=1)

print(r4)

# 三维数组有三个轴

# axis=0 1 2

m = np.arange(1, 13).reshape(1, 2, 6)

print(m, m.shape)

n = np.arange(101, 113).reshape(1, 2, 6)

print(n, n.shape)

print("三维axis=0")    # 在第一个维度(1)上面叠加,变成2

r5 = np.concatenate((m, n), axis=0)

print(r5, r5.shape)

print("三维axis=1")    # 在第二个维度(2)上面叠加,变成4

r6 = np.concatenate((m, n), axis=1)

print(r6, r6.shape)

print("三维axis=2")    # 在第三个维度(6)上面叠加,变成12

r7 = np.concatenate((m, n), axis=2)

print(r7, r7.shape)

(八)数组的分隔 1.split分隔 numpy.split 函数沿特定的轴将数组分隔为子数组,格式如下: numpy.split(ary, indices_or_sections, axis) 参数说明: ary:被分割的数组 indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置。 axis:沿着哪个维度进行切向,默认为0,横向切分。为1时,纵向切分。

# 数组的分隔

import numpy as np

# 创建一维的数组

a = np.arange(1, 13)

# 调用split进行分隔

print("传递整数,平均分隔")

r1 =np.split(a, 4, axis=0)

print(r1)

print("传递数组,按位置分隔")

r2 = np.split(a, [4, 6])

print(r2)

# 创建二维数组

b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12],

[13, 14, 15, 16]])

print(b)

print("axis=0 垂直方向 平均分隔")

r3, r4 = np.split(b, 2, axis=0)

print(r3)

print(r4)

print("axis=0 垂直方向 按位置分隔")

r5, r6, r7 = np.split(b, [2, 3], axis=0)

print(r5)

print(r6)

print(r7)

print("axis=1 水平方向 平均分隔")

r3, r4 = np.split(b, 2, axis=1)

print(r3)

print(r4)

print("axis=1 水平方向 按位置分隔")

r5, r6, r7 = np.split(b, [2, 3], axis=1)

print(r5)

print(r6)

print(r7)

2.水平分隔数组 使用**hsplit(X,axis)**函数 X:表示数组 axis:表示维度数

# 使用hsplit()水平方向分隔

print("hsplit   平均分隔")

r, w = np.hsplit(a, 2)

print(r)

print(w)

print("hsplit   按位置分隔")

r, w = np.hsplit(a, [3])

print(r)

print(w)

3.垂直分隔数组 使用**vsplit(X,axis)**函数 X:表示数组 axis:表示维度数

# 使用vsplit()垂直方向分隔

print("vsplit   平均分隔")

r, w = np.vsplit(b, 2)

print(r)

print(w)

print("vsplit   按位置分隔")

r, w = np.vsplit(b, [1])

print(r)

print(w)

(九)数组的转置 使用transpose()函数

a, axes=None

Examples

--------

>>> x = np.arange(4).reshape((2,2))

>>> x

array([[0, 1],

[2, 3]])

>>> np.transpose(x)

array([[0, 2],

[1, 3]])

>>> x = np.ones((1, 2, 3))

>>> np.transpose(x, (1, 0, 2)).shape

(2, 1, 3)

实例:

# 数组的转置

import numpy as np

# 创建二维数组

a = np.arange(1, 25).reshape(8, 3)

print(a)

print("transpose函数进行数组转置 a[i][j]<--->a[j][i]")

b = a.transpose()

print(b, b.shape)

# 可以使用 .T 进行转置

print(a.T)

# numpy中transpose()

c = np.transpose(a)

print(c, c.shape)

# 对于多维数组进行转置

a = a.reshape(2, 3, 4)

print(a, a.shape)

print("对于三维a[i][j][k]进行转置   默认将i和k交换")

r = np.transpose(a)

print(r, r.shape)

# (2, 3, 4)  -->   (3, 4, 2)

c = np.transpose(a, (1, 2, 0))

四、函数 (一)算术函数 如果参与运算的两个对选哪个都是ndarray,并且形状相同,那么会对位彼此之间进行(+ - * /)运算。Numpy算术函数包含简单的加减乘除:add(),subtract()和divide()。

# 算术函数

import numpy as np

a = np.arange(9).reshape(3, 3)

b = np.array([10, 10, 10])

print("加法")

print(np.add(a, b))

print(a+b)

print("减法")

print(np.subtract(b, a))

print(b-a)

# out参数的使用

y = np.empty((3, 3), dtype=np.int)

print("乘法")

np.multiply(a, 10, out=y)

print(y)

结果: 加法 [[10 11 12] [13 14 15] [16 17 18]] [[10 11 12] [13 14 15] [16 17 18]] 减法 [[10 9 8] [ 7 6 5] [ 4 3 2]] [[10 9 8] [ 7 6 5] [ 4 3 2]] 乘法 [[ 0 10 20] [30 40 50] [60 70 80]]

(二)数学函数 1.Numpy提供了标准的三角函数:sin()、cos()、tan()。

import numpy as np

# 三角函数

a = np.array([0, 30, 60, 90])

print(np.sin(a))

print(np.cos(a))

print(np.tan(a))

结果: [ 0. -0.98803162 -0.30481062 0.89399666] [ 1. 0.15425145 -0.95241298 -0.44807362] [ 0. -6.4053312 0.32004039 -1.99520041]

2.**numpy.around()**函数返回指定数字的四舍五入值。 格式如下: numpy.around(a, decimals) 参数说明: a:数组 Decimals:舍入的小数维数。默认值为0,。如果为负,整数将四舍五入达到小数点左侧的位置。 3.numpy.floor()返回数字的下舍整数 4.numpy.ceil()返回数字的上入整数

import numpy as np

# around、ceil、floor

a = np.array([1.0, 4.55, 123, 0.567, 25.532])

print("around:", np.around(a))

print("ceil:", np.ceil(a))

print("floor:", np.floor(a))

结果: around: [ 1. 5. 123. 1. 26.] ceil: [ 1. 5. 123. 1. 26.] floor: [ 1. 4. 123. 0. 25.]

5.聚合函数(统计函数) Numpy提供了很多统计函数,英语从数组中查找最小元素,最大元素,百分比标准差和方差等。 函数名 说明 np.sum() 求和 np.prod() 所有元素相乘 np.mean() 平均值 np.std() 标准差 np.var() 方差 np.median() 中数 np.power() 幂运算 np.sqrt() 开方 np.min() 最小值 np.max() 最大值 np.argmin() 最小值的下标 np.argmax() 最大值的下标 np.inf() 无穷大 np.exp(10) 以e为底的指数 np.log(10) 对数

1.numpy.power() numpy.power()函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

import numpy as np

# power()

a = np.arange(1, 13).reshape(3, 4)

print("原数组a")

print(a)

print("power:", np.power(a, 2))

# power中out的使用

x = np.arange(5)

y = np.zeros(10)

np.power(2, x, out=y[:5])

print(y)

结果: 原数组a [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] power: [[ 1 4 9 16] [ 25 36 49 64] [ 81 100 121 144]] [ 1. 2. 4. 8. 16. 0. 0. 0. 0. 0.]

2.**numpy.median()**函数 numpy.median()函数用来求奇偶数的中位数。

import numpy as np

# median()

# 一位数组的中位数

a = np.array([4, 3, 2, 5, 2, 1])    # 对数组排序[1,2,2,3,4,5]数组中元素个数为偶数。中位数指:中间两个数的平均

print(np.median(a))

a = np.array([4, 3, 2, 5, 2])    # 对数组排序[2,2,3,4,5]数组中元素个数为奇数。中位数指:中间两个数的平均

print(np.median(a))

# 二维数组,要通过axis指定轴

a = np.arange(1, 13).reshape(3, 4)

print(a)

print("垂直方向", np.median(a, axis=0))

print("水平方向", np.median(a, axis=1))

结果: 2.5 3.0 [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 垂直方向 [5. 6. 7. 8.] 水平方向 [ 2.5 6.5 10.5]

3.numpy.mean() numpy.mean()用于求平均值。

import numpy as np

# numpy.mean()用于求平均值

# 一维数组

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

print(np.mean(a))

#二维数组,要通过axis指定轴

a = np.arange(1, 13).reshape(3, 4)

print(a)

print(np.mean(a))

print("垂直方向", np.mean(a, axis=0))

print("水平方向", np.mean(a, axis=1))

结果: 3.2 [[ 1 2 3 4] [ 5 6 7 8] [ 9 10 11 12]] 6.5 垂直方向 [5. 6. 7. 8.] 水平方向 [ 2.5 6.5 10.5]

4.其它(sum()、max()、min()、argmax()、argmin())

import numpy as np

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

print("max:", np.max(a))

print("min:", np.min(a))

print("sum:", np.sum(a))

print("argmax:", np.argmax(a))

print("argmin:", np.argmin(a))

结果: max: 5 min: 2 sum: 16 argmax: 3 argmin: 2

[转载] Python之Numpy模块中的方法详解相关推荐

  1. python resample函数_Pandas中resample方法详解

    Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法. 方法的格式是: DataFrame.resample(rule, h ...

  2. numpy中reshape方法详解

    numpy中reshape方法详解_zhanggonglalala的博客-CSDN博客_reshape

  3. python截图黑屏_对Python获取屏幕截图的4种方法详解

    Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time imp ...

  4. JavaScript中getBoundingClientRect()方法详解

    JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...

  5. python list遍历删除,对python list 遍历删除的正确方法详解

    在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: num_list = [1, 2, 3, 4, 5] print(num_list) for i in range(len(num ...

  6. python read_excel 参数_对Python 2.7 pandas 中的read_excel详解

    对Python 2.7 pandas 中的read_excel详解 发布时间:2020-08-28 03:32:56 来源:脚本之家 阅读:106 作者:G_66_hero 导入pandas模块: i ...

  7. python移动平均线绘图_对python pandas 画移动平均线的方法详解

    数据文件 66001_.txt 内容格式: date,jz0,jz1,jz2,jz3,jz4,jz5 2012-12-28,0.9326,0.8835,1.0289,1.0027,1.1067,1.0 ...

  8. Pandas中resample方法详解

    Pandas中resample方法详解 Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法.重新取样时间序列数据. 方便的 ...

  9. php中魔术方法详解

    〝 古人学问遗无力,少壮功夫老始成 〞php中魔术方法详解,在php中有一类方法,很奇怪常,那就是只要满足一定条件,就会自己执行,那就是php中的魔术方法,码字不易,出精品更难,没有特别幸运,那么请先 ...

最新文章

  1. cv::Mat使用笔记
  2. python web-python web入坑指南
  3. C++Primer第五版——习题答案详解(九)
  4. 十分钟了解Kubernetes
  5. 非对称加解密交互故事
  6. sdut1197约瑟夫问题
  7. python 字符串删除重复_Python删除list里的重复元素有几种方法?
  8. 基于JAVA+Servlet+JSP+MYSQL的运动会管理系统
  9. ​搞懂微服务,从捕捉一头野猪说起
  10. angularjs过滤器(number)
  11. Python 中缀表达式转换后缀表达式
  12. 被吐槽得最惨的10大专业,计算机专业亮了
  13. mongodb日志分析工具mtools之mplotqueries
  14. 利用反射等离激元超表面的模拟光计算
  15. java题兔子第三个月生_JAVA编程之古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子...
  16. 通过OpenWrt路由器实现王者荣耀、快手、抖音过滤
  17. Linux - free相关
  18. zabbix监控阿尔法特(OmniStack LS 6248)交换机
  19. LeetCode 36. Valid Sudoku(九宫格数独)
  20. SpringBoot----[16]—SpringBoot集成MyBatis

热门文章

  1. java中implements是什么意思_java中extends与implements区别
  2. 【CSP201312-4】有趣的数(数位DP)
  3. 将html对象转换成jq,2js对象与jq对象之间互转.html
  4. java生成iso9660工具_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...
  5. android gettext方法,方法getText()必须从UI线程(Android Studio)调用
  6. python 其他语言_谈谈Python和其他语言的区别
  7. 软件工程师的技能知识图谱0.2
  8. bzoj 1113: [Poi2008]海报PLA(栈)
  9. bzoj 1050: [HAOI2006]旅行comf(尺取+最短路)
  10. cube云原生机器学习平台-架构(三)