Numpy总结

numpy使用方法总结

一 模块导入

import numpy as np

二 N维数组(ndarray)

2.1 ndarray的属性

在这里插入图片描述

# 创建二位数组
x = np.array([[1,2,3],[3,4,5],[6,7,8]])
# 数组x的形状
x.shape        # (3,3)
# 数组的大小
x.size         # 9
# 数组的维数
x.ndim         # 2
# 数组的元素长度
x.itemsize     # 8个字节
# 数组元素类型
x.dtype        # 'int64'

2.2 ndarray的形状

一维数组:1个[ ]
二维数组:2个[ ]
三维数组:3个[ ],是二维数组的叠加

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

2.3 ndarray的类型

# 查看数组的类型
type(x.dtype)
# 指定数组类型
a = np.array([1, 2, 3], dtype=np.float32)

在这里插入图片描述

三 数组的基本操作

3.1 生成0或1的数组

np.ones(shape, dtype)
np.ones_like(a, dtype)
np.zeros(shape, dtype)
np.zeros_like(a, dtype)

score = np.ones([2,3],dtype="int64")
# out:array([[1, 1, 1], [1, 1, 1]])
zeros = np.zeros_like(score)
# out:array([[0, 0, 0], [0, 0, 0]])

3.2 在现有数组基础上生成

a = np.array([[1,2,3])
# array和asarray方法
a1 = np.array(a)
a2 = np.asarray(a)

区别:array是深拷贝,asarray是浅拷贝

**3.3 生成固定范围的数组

np.linspace (start, stop, num, endpoint)

start:起始值
stop:结束值
num:要生成的等间隔样例数量,默认为50
endpoint:是否包含结束值,默认为ture

np.linspace(0,10,11)
np.arange(start,stop, step, dtype)

step:步长,默认值为1

np.arange(0,10,2)
np.logspace(start,stop, num)

创建等比数列
num:要生成的等比数列数量,默认为50

# 10的次方
np.logspace(0,2,4)

**3.4 生成随机数组

(1)正态分布

np.random.randn(d0, d1, …, dn)
* np.random.normal(loc=0.0, scale=1.0, size=None)

loc:均值,μ
scale:标准差 σ(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)方差σ^2

size:数量

x = np.random.normal(0, 1, 10000)
np.random.standard_normal(size=None)

返回指定形状的标准正态分布的数组

(2)均匀分布

np.random.rand(d0, d1, …, dn)

返回[0.0,1.0)内的一组均匀分布的数。

*np.random.uniform(low=0.0, high=1.0, size=None)

low: 采样下界,float类型,默认为0
high: 采样上界,float类型,默认为1
size: 数量

x = np.random.uniform(-1, 1, 10000)
np.random.randint(low, high=None, size=None, dtype=‘l’)

若high不为None时,取[low,high)之间随机整数,否则取值[0,low)之间随机整数。

3.5 数组的索引、切片

对象[:, :] — 先行后列

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

3.6 形状修改

ndarray.reshape(shape, order)

行、列不进行互换
需要保持元素个数前后相同
返回一个新的数组

x = np.array([[1,2,3],[4,5,6]])
x.reshape([3,2])
x.reshape([-1,2])  # -1表示待计算
ndarray.resize(new_shape)

在原数组上修改
需要保持元素个数前后相同
行、列不进行互换

ndarray.T

数组的转置

3.7 类型修改

ndarray.astype(type)
x.astype(np.int32)
ndarray.tostring([order])

转换为字符串类型

x = np.array([[1, 2, 3], [4, 5, 6]])
x.tostring()
ndarray.tobytes([order])

转换为byte类型

3.8 数组的去重

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

四 ndarray运算

4.1 逻辑运算

# 条件为真返回True 否则为False
x = np.array([1, 2, 3])
x > 2
# out: array([ False, False, True])

# BOOL赋值, 将满足条件的设置为指定的值
x[x > 2] = 1
# out: array([ 1,  2,  1])

4.2 通用判断函数

(1)np.all()

相当于and,全真为真

(2)np.any()

相当于or,全假为假

4.3 三元运算符

np.where()
# 大于60的赋值1,否则赋值0
np.where(temp[:4,:] > 60, 1, 0)

复合逻辑需要结合np.logical_and和np.logical_or使用

# 同时满足大于60和小于90,赋值为1,否则赋值为0
np.where(np.logical_and(temp > 60, temp < 90), 1, 0)
# 满足大于90或小于60,赋值为1,否则赋值为0
np.where(np.logical_or(temp > 90, temp < 60), 1, 0)

4.4 统计运算

axis表示按行或者按列统计,不填则统计全部
(1)min(a, axis)
(2)max(a, axis])
(3)median(a, axis) ——>中位数
(4)mean(a, axis, dtype)——>平均值
(5)std(a, axis, dtype)——>标准差
(6)var(a, axis, dtype)——>方差
求最大值最小值对应的下标
np.argmax(temp, axis=)
np.argmin(temp, axis=)

五 数组运算

5.1 数组与数

arr = np.array([1, 2, 3])
# 数组中每个数都加1
arr + 1
# out: array([2, 3, 4])
# 数组中每个数都除2
arr / 2
# out: array([0.5, 1, 1.5])

5.2 数组与数组

广播机制

(1)数组的某一维度等长
(2)或者其中某一数组的某一维度为1

六 numpy中的矩阵运算

(1)np.matmul

只能矩阵与矩阵(向量)相乘

(2)np.dot

既可以矩阵乘矩阵(向量),也可以矩阵与数字相乘

补充

问题1:

# 输出结果
arr = np.arange(6).reshape(1, 2, 3)
print(arr.transpose(2, 0, 1))
''' out:
[[[0 3]]
[[1 4]]
[[2 5]]] '''

转自:transpose用法:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值