Numpy

创建数组

np1 = np.array([[1,2,3],[34,44,54]],dtype=np.float)		# dtype参数用于指定数据类型
np2 = np.array(np.random.randint(12,size=(3,4)),dtype=np.str)
np3 = np.array(np.arange(10)).reshape(2,5)		# 重新设置矩阵大小
np4 = np.empty([3,2])			# 创建空数组
np5 = np.zeros([3,4])			# 常见全部为0的数组
np6 = np.ones([3,4])			# 常见全部为1的数组

从现有数据中创建数组

语法: numpy.asarray(a, dtype = None, order = None)
a: 任意形式的输入参数,比如列表、列表的元组、元组、元组的元组、元组的列表
dtype: 数据类型

x = [3,4,5]
y = [11,21,31]
np.asarray([x,y])		
# [[ 3  4  5]
#  [11 21 31]]

从可迭代对象构建一个ndarray对象
语法: numpy.fromiter(iterable, dtype, count = -1)
count表示读取的数量, -1代表全部

def iter(x):
    for i in range(x):
        yield i

x = iter(6)		
print(x)		# <generator object iter at 0x00000255CF2FE4F8>
q = np.fromiter(x,dtype=int)
print(q)		# [0 1 2 3 4 5]

创建给定范围的数组

语法: numpy.arange(start, stop, step, dtype) 类似python的range

np4 = np.arange(10,20,2,dtype=float)
print(np4)
[10. 12. 14. 16. 18.]

创建等差数列

语法: numpy.linspace(start, stop, num, endpoint, retstep, dtype)
num:代表生成等差样例的个数
endpoint: 代表是否包含最后一个值
retstep: 是否返回等差数值

np5 = np.linspace(10,20,5,endpoint=False,retstep=True)
print(np5)		(array([10., 12., 14., 16., 18.]), 2.0)

常用方法

数组大小,调整数组大小

  • reshape(返回一个新数组,不改变原始数组)
  • resize(无返回值,直接改变原始数组)
# ndarry.shape		# 返回该数组维度的元组,也可以重置数组大小
print(np1.shape)	# (2, 3)
print(np2.shape)	# (3, 4)
print(np3.shape)	# (2, 5)
np1.shape=(3,2)
print(np1.shape)	# (3, 2)
#####################################
# 使用reshape函数来调整数组大小
# 若参数为(-1,1)代表生成x行,1列的数组 -> 把一维变二维
np2 = np2.reshape(6,2)
print(np2.shape)	# (6, 2)

得到数组维度

print(np3.ndim)		# 2
np2 = np2.reshape(2,3,2)
print(np2.ndim)		# 3

转秩

语法: numpy.T

print(np1)
print(np1.T)
'''
[[ 1.  2.  3.]
 [34. 44. 54.]]
[[ 1. 34.]
 [ 2. 44.]
 [ 3. 54.]]
'''

数组的拼接

语法: numpy.concatenate(arrays, axis=None, out=None)
axis =0 :按行进行拼接, 上下 列数必须一样
axis =1 :按列进行拼接, 左右 行数必须一样

q1 = np.arange(12).reshape(4,3)
q2 = np.arange(12).reshape(4,3)
print(q1)
print(q2)
pj1 = np.concatenate([q1,q2],axis=0)
pj2 = np.concatenate([q1,q2],axis=1)

print(pj1)
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
 
print(pj2)
[[ 0  1  2  0  1  2]
 [ 3  4  5  3  4  5]
 [ 6  7  8  6  7  8]
 [ 9 10 11  9 10 11]]

数组的拆分

语法: numpy.split(ary, indices_or_sections, axis=0)
axis = 0: 拆分行
axis = 1: 拆分列

q3 = np.arange(16).reshape(4,4)
# 平均分, 第二个参数表示分成几份
print(np.split(q3,2,axis=1))
[array([[ 0,  1],
       [ 4,  5],
       [ 8,  9],
       [12, 13]]), array([[ 2,  3],
       [ 6,  7],
       [10, 11],
       [14, 15]])]
print(np.split(q3,2,axis=0))
[array([[0, 1, 2, 3],
       [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
       [12, 13, 14, 15]])]


# 在某个索引处拆分
print(np.split(q3,[3],axis=1))	# 在列索引为3处拆分
[array([[ 0,  1,  2],
       [ 4,  5,  6],
       [ 8,  9, 10],
       [12, 13, 14]]), array([[ 3],
       [ 7],
       [11],
       [15]])]
print(np.split(q3,[3],axis=0))	# 在行索引为3处拆分
[array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]


# 把数组拆分成多段
print(np.split(q3,[1,3],axis=1))	# 在列索引分别为1和3处进行拆分
[array([[ 0],
       [ 4],
       [ 8],
       [12]]), array([[ 1,  2],
       [ 5,  6],
       [ 9, 10],
       [13, 14]]), array([[ 3],
       [ 7],
       [11],
       [15]])]
print(np.split(q3,[1,3],axis=0))	# 在行索引分别为1和3处进行拆分
[array([[0, 1, 2, 3]]), array([[ 4,  5,  6,  7],
       [ 8,  9, 10, 11]]), array([[12, 13, 14, 15]])]

数组的排序

语法: numpy.sort(a, axis=-1, kind=None, order=None)
默认按行, axis=0 按列

ar3 = np.array(np.random.randint(10,size=(3,4)))
print(ar3)
row = np.sort(ar3,axis=0)
line= np.sort(ar3,axis=1)

统计数组内的值

a1 = np.arange(48).reshape(6,8)
print("小于20的共有{}个".format(np.count_nonzero(a1<20)))
print("大于20的共有{}个".format(np.sum(a1>20)))
a2 = np.array([-2,-1,27,3,4,67,9,36,6]).reshape(3,3)
print("a2中所有的数都大于0吗:",np.all(a2>0))
print("a2中包含大于0的数吗:",np.any(a2>0))
a1 = np.random.randint(12,size=(4,3))
print(a1)
print(a1.sum(axis=0))
print(a1.sum(axis=1))

判断,并且替换

语法: numpy.where(condition, x=None, y=None)
condition: 判断的条件
x: 满足条件的结果
y: 不满足条件的结果

whe = np.random.randint(10,size=(3,4))
print(whe)
where = np.where(whe>3,whe,-1)
print(where)

索引和切片

# 一维数组
n7 = np.arange(1,10)
print(n7)
print(n7[2:8:2])
print(n7[5])
# 二维数组
n7 = np.arange(1,21).reshape(4,5)
print(n7)
print(n7[1:3,1:3])	# 索引为1到3和行,再找索引为1到3的列的所有数字 等价于n7[1:3][1:3]
# 高级索引
print(n7[[1,2,3],[1,2,3]])# 索引为(1,1),(2,2),(3,3)的数值
print(n7[1:4,1:4])	# 索引为1:4的行和1:4的列
# 布尔值索引
print(n7[n7>15])

n8 = a = np.array([np.nan,1,2,np.nan,3,4,5])
print(n8[~np.isnan(n8)])	# 找出非空值

# 找出

将多维数组展开为一维数组

数组(ndarray)对象提供了ravel方法,用来将多维数组展开为一维数组。

import numpy as np
# 创建er维数组
x3 = np.arange(12).reshape(3,4)
# 对该三维数组进行索引
x3.ravel()
'''
输出:
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
'''

数组的广播

两个数组相运算时, 由于维度不同, 会自动进行填充再运算

a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]])
b = np.array([1.0,2.0,3.0])
print(a*b)
'''
[[ 0.  0.  0.]
 [10. 20. 30.]
 [20. 40. 60.]
 [30. 60. 90.]]
 '''

在这里插入图片描述

计算

import numpy as np
x1 = np.array([[0,1],[2,3]])
y1 = np.array(np.arange(4,8)).reshape(2,2)
print(x1)
[[0 1]
 [2 3]]
print(y1)
[[4 5]
 [6 7]]
 
# 简单的相乘
print(x1*y1)
[[ 0  5]
 [12 21]]
 
# 矩阵运算
print(np.dot(x1,y1))
print(x1.dot(y1))
[[ 6  7]
 [26 31]]
x = np.array(np.random.randint(50,size=(2,3)))
print(x)
[[48 13  3]
 [39 10 20]]
# 求每一行的最小值
print(np.min(x,axis=1))
[ 3 10]
# 求每一列的和
print(np.sum(x,axis=0))
[87 23 23]
# 求最大小小值的索引位置
print(np.argmin(x))

# 小于某个值的数变为某个值, 大于的也是
# 把x中小于10的都变为10, 大于15的都变为15
print(np.clip(x,10,15))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值