numpy的用法总结

NumPy - Ndarray 对象

NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它一系列相同类型的元素集合。以0下标作为索引的起点

  • 用array函数创建即可:
    def array(p_object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0):
名称描述
p_object数组或嵌套的数列
dtype数组的所需数据类型,可选
copy可选,默认为true,对象是否被复制
orderC(按行)、F(按列)或A(任意,默认)
subok默认情况下,返回的数组被强制为基类数组。 如果为true,则返回子类
ndmin指定返回数组的最小维数

例1:创建一个一维数组

import numpy as np 
a = np.array([1,2,3]) 
print(a)

例2:创建一个二维数组

data1 = [[1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10]]
b = np.array(data1)
print(b)
  • 查看数组维度
# 查看数组维度
print(b.ndim)
  • 数组类型
# 数组类型
c = np.array([1, 2, 3, 4, 5])
print(c)
print(c.dtype)

数组类型

NumPy 支持比 Python 更多种类的数值类型。 下表显示了 NumPy 中定义的不同标量数据类型,常见的,还有很多没有列举

名称描述
bool_存储为一个字节的布尔值(True或False)
int_默认整数,相当于 C 的long,通常为int32或int64
nt8字节(-128 ~ 127)
int1616 位整数(-32768 ~ 32767)
int32 32 位整数(-2147483648 ~ 2147483647)
int6464 位整数(-9223372036854775808 ~ 9223372036854775807)

NumPy - 数组属性

  • ndim(维度),shape(几行几列),size(元素总个数),dtype(数据类型),itemsize(每个元素的字节数),flags(对象的内存信息),real(元素的实部),imag(元素的虚部),date(实际元素缓冲区,一般不用)
    例:
import numpy as np

#生成25个数据,并定义为5行5列
a = np.arange(25, dtype = np.float).reshape(5,5)
b = np.array([1,2,3,4,5])
print(a)
print(b)
#数组a的属性
print(a.ndim)
print(a.shape)
print(a.size)
print(a.dtype)
print(a.itemsize)

创建数组

  • 0元素数组

# 1:0元素数组
import numpy as np

e = np.zeros(5)
print(e)
  • 1元素数组
# 1元素数组
import numpy as np
s1 = np.ones(5)
print(s1)
  • 创建5维数组
# 创建5维数组
s2 = np.ones([5,5], dtype = float)
print(s2)
  • arange用法:numpy.arange(start, stop, step, dtype)
arr = np.arange(10)
print(arr)
arr2 = np.arange(-10,10,2)
print(arr2)

arr3 = np.arange(-10,10,2,dtype=float)
print(arr3)
  • 等差数列数组linspace
    此函数类似于arange()函数。 在此函数中,指定了范围之间的均匀间隔数量,而不是步长
    numpy.linspace(start, stop, num, endpoint, retstep, dtype)
    start 序列的起始值
    stop 序列的终止值,如果endpoint为true,该值包含于序列中
    num 要生成的等间隔样例数量,默认为50
    endpoint 序列中是否包含stop值,默认为ture
    retstep 如果为true,返回样例,以及连续数字之间的步长
    dtype 输出ndarray的数据类型
    例:
import numpy as np
a = np.linspace(0,5,6)
print(a)

endpoint设置为True则不包括终点

import numpy as np

a2 = np.linspace(0,5,6,endpoint = False)
# 设置为True则不包括终点
print(a2)
  • 等比数列数组;logspace
    此函数返回一个ndarray对象,其中包含在对数刻度上均匀分布的数字。 刻度的开始和结束端点是某个底数的幂,通常为 10
    numpy.logscale(start, stop, num, endpoint, base, dtype)
    start 起始值是base ** start
    stop 终止值是base ** stop
    num 范围内的数值数量,默认为50
    endpoint 如果为true,终止值包含在输出数组当中
    base 对数空间的底数,默认为10
    dtype 输出数组的数据类型,如果没有提供,则取决于其它参数
    例:
import numpy as np
a = np.logspace(1,10,10,base=2)
print(a)
import numpy as np
a = np.logspace(3,10,8,base=2)
# 相当于从2**3和2**10的数,之间找出8个的等比数数列
print(a)
print(len(a))

索引和切片

索引

  • 一维数组
import numpy as np
# 随机生成数组
a = np.random.randn(6)
print(a)
  • 获取第3个元素
print(a[2])
  • 获取最后一个元素
print(a[-1])

获取第2个和第5个元素

print(a[[1,4]])
  • 二维数组
import numpy as np
# 二位数列索引
b=np.arange(16).reshape(4,4)
print(b)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
第二行第三列:7
print(b[1,3])

获取第二行以后的第4列的所有元素:[ 7 11 15]
print(b[1:,3])

获取第二行前三列数据:[4 5 6]
print(b[1,:3])

切片

  • 一维数组
c = np.arange(10)
print(c)
print(c[1:6])
  • 二维数组
d=np.arange(16).reshape(4,4)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]
 
获取数组d的第一行元素
print(d[0,:])
[0 1 2 3]

获取数组d的第一列元素
print(d[:,0])
[ 0  4  8 12]

或者用:print(d[1,...])
print(d[1:3,1:3])
[[ 5  6]
 [ 9 10]]

若要提取的行或者列的索引不是连续的,可以指定索引数组

print(d[[1,3],1:3])
[[ 5  6]
 [13 14]]

切片还可以包括省略号(…),来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的ndarray,

高级索引

如果一个ndarray是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray。高级索引始终返回数据的副本。 与此相反,切片只提供了一个视图
有两种类型的高级索引:整数和布尔值

整数索引

基于 N 维索引来获取数组中任意元素。 每个整数数组表示该维度的下标值,
行索引包含所有行号,列索引指定要选择的元素

import numpy as np

x = np.array([[1,  2],  [3,  4],  [5,  6]])
print(x)
[[1 2]
 [3 4]
 [5 6]]
 
y = x[[0,1,2],  [0,1,0]]
print(y)
[1 4 5]

布尔索引

大于 5 的元素会作为布尔索引的结果返回

import numpy as np
x = np.array([[  0,  1,  2],[  3,  4,  5],[  6,  7,  8],[  9,  10,  11]])  
print(x)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
 
print(x[x >  5])
[ 6  7  8  9 10 11]
  • 过滤NaN
import numpy as np
a = np.array([np.nan,  1,2,np.nan,3,4,5])
print(a[~np.isnan(a)])
[1. 2. 3. 4. 5.]

从数组中过滤掉非复数元素

import numpy as np
a = np.array([1,  2+6j,  5,  3.5+5j])
print(a[np.iscomplex(a)])
[2. +6.j 3.5+5.j]

数组操作

修改数组形状

# 修改数组形状
import numpy as np
a = np.arange(12)
print ('原始数组:')
print (a)
b = a.reshape(3,4)
print ('修改后的数组:')
print (b)

翻转数组

# 翻转数组
import numpy as np
a = np.arange(20).reshape(5,4)
print ('原数组:')
print (a )
print ('对换数组:')
print (np.transpose(a))

方法二:ndarray.T

# 方法二:ndarray.T
import numpy as np
a = np.arange(16).reshape(4,4)
print('原数组:')
print(a)
print('转置数组:')
print(a.T)

修改数组维度

# 修改数组维度
import numpy as np
A = np.arange(9).reshape(3, 3)
print(A)

对数组进行广播运算

# 对数组进行广播运算
import numpy as np
A = np.arange(9).reshape(3, 3)
print(A)
B = np.arange(3)
print(A+B)
# broadcast_to 函数用法,注意不能改变原来数列的形状
import numpy as np
d = np.arange(4).reshape(1,4)
print (d)
[[0 1 2 3]]

print (np.broadcast_to(d,(3,4)))
[[0 1 2 3]
 [0 1 2 3]
 [0 1 2 3]]

连接数组

  • concatenate():链接沿现有轴的数组序列
# concatenate():链接沿现有轴的数组序列
import numpy as np
a = np.array([[1,2],[3,4]])
print ('第一个数组:')
print (a)
b = np.array([[5,6],[7,8]])
print ('第二个数组:')
print (b)
print ('沿轴0连接两个数组:')
print (np.concatenate((a,b)))
print ('沿轴1连接两个数组:')
print (np.concatenate((a,b),axis = 1))
  • stack():堆叠两个数组
# stack():堆叠两个数组
import numpy as np
a = np.array([[1,2],[3,4]])
print ('第一个数组:')
print (a)
b = np.array([[5,6],[7,8]])
print ('第二个数组:')
print (b)
print ('沿轴 0 堆叠两个数组:')
print (np.stack((a,b),0))
print ('沿轴 1 堆叠两个数组:')
print (np.stack((a,b),1))
  • hstack():水平堆叠
# hstack():水平堆叠:
import numpy as np
a = np.array([[1,2],[3,4]])
print ('第一个数组:')
print (a)
b = np.array([[5,6],[7,8]])
print ('第二个数组:')
print (b)
print ('水平堆叠:')
c = np.hstack((a,b))
print (c)
  • 竖直堆叠
# 竖直堆叠
import numpy as np
a = np.array([[1,2],[3,4]])
print ('第一个数组:')
print (a)
b = np.array([[5,6],[7,8]])
print ('第二个数组:')
print (b)
print ('竖直堆叠:')
c = np.vstack((a,b))
print (c)

分割数组

import numpy as np
a = np.arange(12)
print ('第一个数组:')
print (a)
print ('将数组分为三个大小相等的子数组:')
b = np.split(a,4)
print (b)
print ('将数组在一维数组中表明的位置分割:')
b = np.split(a,[4,7])
print (b)
  • hsplit:竖直切割|
# hsplit:竖直切割|
import numpy as np
a = np.arange(12).reshape(4,3)
print ('数组a:')
print(a)
print ('拆分后的数组:')
print(np.hsplit(a, 3))
  • vsplit:水平分割
import numpy as np
a = np.arange(12).reshape(4,3)
print ('数组a:')
print (a)
print ('水平分割:')
b = np.vsplit(a,2)#2表示分割的组数,但是要注意要被整除分组
print (b)

数组的添加和删除

# resize()
import numpy as np
a = np.array([[1,2,3],[4,5,6]])
print ('第一个数组a:')
print (a)
print ('第一个数组a的形状:')
print (a.shape)
b = np.resize(a, (3,2))
print ('第二个数组b:')
print (b)
print ('第二个数组b的形状:')
print (b.shape)
print ('修改第一个数组a的大小:')
c = np.resize(a,(3,3))
print (c)
  • 添加
# 添加
import numpy as np 
a = np.array([[1,2,3],[4,5,6]]) 
print ('数组a:') 
print (a) 
print ('向数组a添加元素:')
print (np.append(a, [7,8,9]))
print ('沿轴0添加元素:') 
print (np.append(a, [[7,8,9]],axis = 0)) 
print ('沿轴1添加元素:') 
print (np.append(a, [[5,5,5],[7,8,9]],axis = 1))
  • 插入
# 插入
import numpy as np
a = np.array([[1,2],[3,4],[5,6]])
print ('数组a:')
print (a)
print ('未传递 Axis 参数,在插入之前输入数组a会被展开')
print (np.insert(a,3,[11,12]))
print ('传递了Axis 参数,会广播数值生成新的数组')
print ('沿轴0广播:')
print (np.insert(a,1,[11],axis = 0))
print ('沿轴1广播:')
print (np.insert(a,1,11,axis = 1))
  • 删除
# 删除
import numpy as np
a = np.arange(15).reshape(3,5)
print ('数组a:')
print (a)
print ('未传递 Axis 参数,在插入之前输入数组会被展开。')
print (np.delete(a,8))
print ('删除第二列:')
print (np.delete(a,1,axis = 1))
  • 去重
# 去重
import numpy as np
a = np.array([1,2,3,3,2,4,5,4,8,7,2,2,5,9,6])
print ('数组a:')
print (a)
print ('数组a的去重值:')
b = np.unique(a)
print (b)
print ('去重数组a的索引数组:')
b,indices = np.unique(a,return_index = True)
print (indices)
print ('返回去重元素的重复数量:')
c,indices = np.unique(a,return_counts = True)
print (c)
print (indices)

数组排序

  • sort()
import numpy as np
a = np.array([5,21,2,28,6])
print(a)
a.sort()
print(a)
  • 0表示按行排列大小,1是按列排序
# 0表示按行排列大小,1是按列排序
b = np.array([5,21,2,28,7,6]).reshape(2,3)
print ('数组b是:')
print (b)
print ('调用 sort() 函数排序后的数组b:')
print (np.sort(b))
print ('按列排序后的数组b:')
print (np.sort(b, axis =  0))
  • argsort()返回排序后索引,原数据没变
# argsort()返回排序后索引,原数据没变
c=np.array([2,1,5,8,-5,4])
c.argsort()
# 二维排序索引,元数据没变
d=np.array([[1,5,3], [6, 2,8], [3, 6, 0]])
print ('数组d是:')
print (d)
print ('调用 argsort() 函数排序后的数组d:')
print (np.argsort(d))
print ('按列排序后的数组d:')
print (np.argsort(d, axis =  0))
  • lexsort 优先照顾后列排序原则
# 小升初考试,重点班录取学生按照总成绩录取。在总成绩相同时,
# 数学成绩高的优先录取,在总成绩和数学成绩都相同时,
# 按照英语成绩录取…… 这里,总成绩排在电子表格的最后一列,
# 数学成绩在倒数第二列,英语成绩在倒数第三列
import numpy as np
names = np.array(['Tom','Abe','Lily','Jane','Judy'])
ages = np.array([14, 13, 15, 12, 11])  
total_scores = np.array([5., 6., 8., 18., 16.])
maths_scores=np.array([8,7,4,9,6])
index_lexsorted = np.lexsort((maths_scores, total_scores)) 
print(index_lexsorted)
names_lexsorted = names[np.lexsort((maths_scores, total_scores))]
print(names_lexsorted)

函数

字符串函数

# 字符串函数
import numpy as np
print ('连接示例1:')
print (np.char.add(['Hello'],[' Numpy']))
print ('连接示例2:')
print (np.char.add(['Hello', 'Hi'],[' Numpy', ' Pandas']))
  • 首字母大写
# 首字母大写
import numpy as np 
print(np.char.capitalize('python'))
  • 每个元素大写
# 每个元素大写
import numpy as np 
print (np.char.upper(['numpy','pandas'])) 
print (np.char.upper('scipy'))

数学函数用法

# 数字函数用法
import  numpy as np
a = np.arange(5)
b=np.sqrt(a)
c=np.exp(a)
d=np.square(a)#%%
print('数组a:')
print(a)
print('数组a的开方:')
print(b)#%%
print('数组a的指数函数:')
print(c)
print('数组a的开方:')
  • 三角函数
import numpy as np
a = np.array([0,30,45,60,90,180])
b=np.sin(a*np.pi/180)
c=np.cos(a*np.pi/180)
d=np.tan(a*np.pi/180)
print ('数组a:')
print (a)
print ('数组中角度的正弦值:')
print (b)
print ('数组中角度的余弦值:')
print (c)
print ('数组中角度的正切值:')
print (d)

算数函数

import numpy as np
a = np.arange(25, dtype = np.float_).reshape(5,5)
b = np.array([1,2,3,4,5])
c=np.add(a,b)
d=np.subtract(a,b)
e=np.multiply(a,b)
f=np.divide(a,b)
  • 统计函数
# 统计函数
import numpy as np
a = np.array([[1,4,7,3],[5,6,14,33],[12,4,21,9]])
print ('数组a:')
print (a)
print ('调用 amin() 函数计算最小值:')
print (np.amin(a,1))
print ('再次调用 amin() 函数计算最小值:')
print (np.amin(a,0))
print ('调用 amax() 函数计算最大值:')
print (np.amax(a))
print ('再次调用 amax() 函数计算最大值:')
print (np.amax(a, axis = 0))
import numpy as np
a = np.array([[1,4,7,3],[5,6,14,33],[12,4,21,9]])
print ('数组a:')
print (a)
print ('调用 ptp() 函数计算的极差:')
print (np.ptp(a))
print ('沿轴 1 调用 ptp() 函数计算的极差:')
print (np.ptp(a, axis = 1))
print ('沿轴 0 调用 ptp() 函数计算的极差:')
print (np.ptp(a, axis = 0))

import numpy as np
a = np.array([[1,4,7,3],[5,6,14,33],[12,4,21,9]])
print ('数组a是:')
print (a)
print ('调用 percentile() 函数:')
print (np.percentile(a, 10)) # axis 为 0,在纵列上求
print (np.percentile(a, 50, axis=0)) # axis 为 1,在横行上求
print (np.percentile(a, 50, axis=1)) # 保持维度不变
print (np.percentile(a, 50, axis=1, keepdims=True))

矩阵

空矩阵

import numpy.matlib
import numpy as np
a=np.matlib.empty((3,3))
print(a)#数字是随机的

0矩阵

# 0矩阵
import numpy.matlib
import numpy as np
print (np.matlib.zeros((3,4)))

全1矩阵

# 全1矩阵
import numpy.matlib
import numpy as np
print (np.matlib.ones((3,4)))

单位矩阵,对角线为1

# 单位矩阵,对角线为1.
import numpy.matlib
import numpy as np
print (np.matlib.identity(4))

对角阵

# 对角阵
import numpy as np
# K是对角线的索引,n为行数,M为列
print(np.matlib.eye(n=3,M=5,k=0,dtype=float))

随机矩阵

# 随机矩阵
import numpy.matlib
import numpy as np
print (np.matlib.rand(4,4))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值