【Python学习笔记】【Numpy】(十八)科学计算:数组相关函数

python科学计算和可视化

Numpy

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

ndarray对象的属性

NumPy 最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合,以0下标为开始进行集合中元素的索引。
在这里插入图片描述

数组创建

numpy.array函数生成多维数组

原型numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
在这里插入图片描述
向array函数传递一个列表类型的参数。每一个列表元素是一维的ndarray类型数组,作为二维数组的行。
通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是维度,从 0 开始。

import numpy as np

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

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

numpy.arange函数创建数值范围

原型numpy.arange(start, stop, step, dtype)

a = np.arange(10, 20, 2,dtype=float)
print(a)
print(a.shape)
b = np.array([np.arange(1,4), np.arange(4,7), np.arange(7,10)])
print(b)
print(b.shape)
'''
[10. 12. 14. 16. 18.]
(5,)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3, 3)
'''

numpy.random模块创建随机数组

random模块包含了很多方法可以用来产生随机数,random 中的一些常用方法:
在这里插入图片描述

# 返回[0.0, 1.0)范围的随机数
x1 = np.random.random(size=4)
print(x1)
x2 = np.random.random(size=(3,4))
print(x2)

# 生成[low,high)范围的随机整数
y1 = np.random.randint(5,size=10)
print(y1)
y2 = np.random.randint(5,10,size=(2,5))
print(y2)

# 正太分布(高斯分布)loc:期望 scale:方差 size 形状
print(np.random.normal(loc=3,scale=4,size=(2,2,3)))
'''
[0.75617673 0.0867879  0.39283977 0.04067108]
[[0.5845038  0.82715603 0.21760229 0.75216679]
 [0.08367774 0.83766457 0.9341052  0.15900966]
 [0.17243234 0.82217484 0.47456685 0.36939375]]
[0 4 1 3 1 3 4 2 3 0]
[[6 9 8 7 8]
 [7 9 9 9 6]]
[[[10.04927289  5.53607405  7.69652097]
  [ 7.2704039  -0.05533848 -2.02073794]]

 [[ 9.01640789 -3.14352798  5.47406642]
  [ 1.84576422 -3.39346506  1.570987  ]]]
'''

numpy.zeros等函数创建指定大小数组

  • numpy.zeros创建指定大小的数组,数组元素以0来填充
  • numpy.ones 创建指定形状的数组,数组元素以1来填充
  • numpy.empty创建一个指定形状、数据类型且未初始化的数组,里面的元素的值是之前内存的值

相同参数列表numpy.empty(shape, dtype = None, order = 'C')
在这里插入图片描述

import numpy as np

a = np.zeros(5)
print(a)

b = np.ones(5, dtype=int) 
print(b)

c = np.empty([3,2], dtype=int)
print(c)

'''
[0. 0. 0. 0. 0.]
[1 1 1 1 1]
[[         0 1072168960]
 [         0 1072168960]
 [         0          0]]
'''

其它函数
numpy.zeros_like(arr)
numpy.ones_like(arr)

numpy.linspace函数创建等差数列

原型np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
在这里插入图片描述

import numpy as np

x = np.linspace(1,10,10)
print(x)
x2 = np.linspace(10,20,5,endpoint=True,retstep=True)
print(x2)

'''
[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10.]
(array([10. , 12.5, 15. , 17.5, 20. ]), 2.5)
'''

numpy.logspace函数创建等比数列

原型np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
在这里插入图片描述

import numpy as np

x = np.logspace(0,9,10,base=2)
print(x)

'''
[  1.   2.   4.   8.  16.  32.  64. 128. 256. 512.]
'''

数组的其他操作

reshape函数修改数组形状。

切片和索引进行修改和访问

所有切片取出来的数组,即使你把它赋值给了新的变量,它仍是原来数组的视图。

import numpy as np

a = np.arange(1,13).reshape(4,3)
print('数组元素')
print(a)

# 使用索引获取
# 所有行的第二列
print(a[:,1])
# 同时获取第三行第二列,第四行第一列
print(np.array((a[2,1],a[3,0])))
print(a[(2,3),(1,0)])

# 行列都倒序
print(a[::-1,::-1])

数组复制提取:copy函数、切片

import numpy as np

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

# copy()函数实现数组的复制
b = np.copy(a[:2,:2])
print(b)

c = np.array(a[:2,:2])
print(c)

改变数组的维度

  1. reshape方法可以将一维数组变成二维、三维或者多维数组。
  2. ravel 方法或flatten 方法可以将多维数组变成一维数组。
  3. 直接设置 Numpy 数组的shape 属性(元组类型)
  4. resize 方法改变数组的维度
import numpy as np

a = np.arange(24)
print(a)

# 使用reshape将一维数组变成三维数组
b = a.reshape(2,3,4)
print(b)
c = a.reshape(3,8)
print(c)

# 使用ravel函数将三维的b变成一维的数组
a1 = b.ravel()
print(a1)
#使用 flatten 函数将二维的 c 变成一维的数组
a2 = c.flatten()
print(a2)

数组的拼接

如果拼接的行和列数目不同,则会报错。

  1. numpy.concatenate函数用于沿指定轴连接相同形状的两个或多个数组。
    axis参数指沿着它连接数组的轴,默认为0(垂直方向)。1(水平方向)
  2. numpy.hstack函数通过水平堆叠来生成数组。
  3. numpy.vstack函数通过垂直堆叠来生成数组。
import numpy as np

a=np.array([[1,2,3],[4,5,6]])
print(a)
b=np.array([['a','b','c'],['d','e','f']])
print(b)

print(np.concatenate([a,b]))
print(np.concatenate([a,b],axis=1))

print(np.vstack([a,b]))
print(np.hstack([a,b]))

numpy.split函数数组分割

原型numpy.split(ary, indices_or_sections, axis)
参数说明:

  • arry:被分割的数组。
  • indices_or_sections:如果是一个整数,就用该数平均切分,如果是一个数组,为沿轴切分的位置。
  • axis:沿着哪个维度进行切分,默认为 0,横向切分。为 1 时,纵向切分。
import numpy as np

x=np.arange(1,9)
a=np.split(x,4)
print(a)
b=np.split(x,[3,5])
print(b)

'''
[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]
'''

numpy.transpose函数进行数组转置

import numpy as np

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

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

算数运算

  • 加减乘除: add(),subtract(),multiply() 和divide()
    直接使用print(np.add(a,b))
# 通用函数指定输出结果的用法
import numpy as np
x = np.arange(5)
y = np.empty(5)
np.multiply(x, 10, out=y)
print(y)
  • numpy.around() 函数返回指定数字的四舍五入值。
    numpy.around(a,decimals)
    参数说明:
    a: 数组。
    decimals: 舍入的小数位数。 默认值为 0。 如果为负,整数将四舍五入到小数点左侧的位置。
  • numpy.floor() 返回数字的下舍整数。
  • numpy.ceil() 返回数字的上入整数。

聚合函数

在这里插入图片描述

  • numpy.power() 函数将第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。
  • numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。
  • numpy.mean() 函数返回数组中元素的算术平均值。 如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。
import numpy as np

a=np.arange(12).reshape(3,4)
print(a)
print(np.power(a,2))

print(np.median(a))
print(np.median(a,axis=1)) # 行

print(np.mean(a))
print(np.mean(a,axis=0)) # 列

'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[[  0   1   4   9]
 [ 16  25  36  49]
 [ 64  81 100 121]]
5.5
[1.5 5.5 9.5]
5.5
[4. 5. 6. 7.]
'''
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值