Numpy入门

一、numpy基础

1、通过列表创建数组

import numpy as np
import matplotlib.pyplot as plt

arr1 = np.array([1, 2, 3]) # 一维数组
print(arr1, arr1.shape)

arr2 = np.array([[1, 2, 3], [4, 5, 6]]) # 二维数组
print(arr2, arr2.shape)

arr1 = np.random.randint(1,5,(3,4)) # 三行四列,样本取值范围为1,5的整数
print(arr1)

arr2 = np.random.uniform(1,5,(3,4)) # 样本取值范围为1,5的浮点数
print(arr2)

2、 读取本地图片

cat1 = plt.imread("cat.jpg")
print(cat1)
print(type(cat1))

plt.imshow(cat1)
plt.show() # 显示图片
# 图片的维度,任何一张二维图片都能转化成3维数组,(长,宽,颜色)
print(cat1.shape)

# 可以改变图片的颜色
cat2 = cat1 - 50
plt.imshow(cat2)
plt.show()

3、通过np的routlines函数创建数组

arr1 = np.ones(shape = (10, 8), dtype=int) # 创建全1的数组
print(arr1)
 
arr2 = np.ones(shape=(100, 100 ,3), dtype="float")
plt.imshow(arr2)
plt.show() # 显示一张纯白色的图片

arr2 = np.empty((3,4)) # 初始化数组,不是总返回全0,有时返回内存中的随机值
print(arr2)

arr3 = np.zeros((4, 4)) # 全0数组
print(arr3)

arr4 = np.full((3, 4),fill_value = (3))
print(arr4)

list1 = range(10)
arr4 = np.array(list1) # 将列表转换成数组
print(arr4)

arr5 = np.eye(10) # 10行10列,对角线为1,其他为0
print(arr5, arr5.shape)

arr6 = np.linspace(0 ,100, 20) # 从0到100均匀的划分20份
print(arr6)

arr7 = np.arange(0, 100, 5) # 创建一维数组,左闭右开
print(arr7)

arr8 = np.random.randint(0, 15, 5) # 0到15之间随机生成5个数
print(arr8)

arr9 = np.random.randn(10) # 随机正态分布10个数
print(arr9)

arr10 = np.random.normal(loc = 1, scale = 10, size = 100) # scale是波动系数
print(arr10)

arr11 = np.random.random(size=10) # 生成0到1的随机数
print(arr11)

二、ndarray的基本操作

1、索引

n1 = np.random.randint(0, 100, 10)
print(n1)
print(n1[4])

# 条件索引
year_arr = np.array([[2000,2001,2000],[2005,2002,2009],[2001,2003,2010]]) # 将列表转换为数组
print(year_arr)
is_year_after_2005 = year_arr>=2005
print(year_arr[is_year_after_2005])

2、切片

n2 = np.random.randint(160, size=10)
print(n2)
print(n2[2:5]) #切片时左闭右开

3、变形

n3 =  np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(n3.shape)
print(n3.reshape((5, 2))) # 注意reshape的参数是一个元组

print(cat1.shape)
# 将三维转化成一维数组
cat1.reshape(121*121*3)
# 或者直接 cat1.reshape(-1)

4、级联
级联的参数是列表,一定要加中括号或小括号;
维度必须相同,形状相符,方向默认是shape元组的第一个值所代表的维度;
可通过axis参数改变级联的方向(0或1)

n1 = np.random.randint(0 ,10, size=(5, 5))
n1
np.concatenate((n1, n1), axis=0)

plt.imshow(cat1)
plt.show() 
cats = np.concatenate((cat1, cat1)) # 将两张猫图拼接
plt.imshow(cats)
plt.show()

# vstack 垂直 hstack水平
n4 = np.array([2, 3, 4, 5])
np.hstack(n4)
np.vstack(n4)

5、切分

n5 = np.random.randint(0, 10, size=(5, 4))
print(n5)
print(np.split(n5, (2, 4))) # 第2行和第4行分别切一次,分成3个部分

6、副本
所有赋值运算不会为ndarray的任何元素创建副本;
对赋值后的对象的操作也对原来的对象生效

n6 = np.array([1, 2, 3, 4])
n6[3] = 3
print(n6)
# 可使用copy创建副本
n7 = n6.copy()
n7[1] = 0
print(n6)
print(n7)

7、转换数组的类型

float_arr = np.random.rand(3,4)
int32_arr = float_arr.astype(np.int32)
print(int32_arr)

三、ndarray的函数操作

1、元素统计函数

import numpy as np
# 2行3列的成正态分布的数组
arr = np.random.randn(2,3)
print(arr)

print(np.ceil(arr)) # 向上取整

print(np.floor(arr)) # 向下3取整

print(np.rint(arr)) # 四舍五入

print(np.isnan(arr)) # 判断元素是否为NaN

print(np.multiply(arr, arr)) # 元素相乘

print(np.divide(arr,arr)) # 元素相除

print(np.abs(arr)) # 元素的绝对值

# 三元运算符 where(condition,x,y): x if condition else y
print(np.where(np.isnan(arr), 0, arr)) # 如果有空值则用0补上,没有就显示原始值
print(np.where(arr>0, True, False)) # 如果元素>0就显示True,否则显示False

2、聚合函数

arr = np.random.randint(1,10, (3,4))
print(arr)
# 多维数组默认统计全部维度,axis参数为0按列统计,为按行统计

# 求所有元素的平均值
print(np.mean(arr)

# 求所有元素的和
print(np.sum(arr))

# 所有元素的最大值
print(np.min(arr))

# 所有元素的最小值
print(np.max(arr))

# 所有元素的标准差 
print(np.std(arr))

# 所有元素的方差
print(np.var(arr))

# 最大值的下标索引值
print(np.argmax(arr))

# 最小值的下标索引值
print(np.argmin(arr))

# 返回一个一维数组,每个元素都是之前所有元素的累加和
print(np.cumsum(arr))

# 返回一个一维数组,每个元素都是之前元素的累乘积
print(np.cumprod(arr))

3、判断函数

arr = np.random.randn(2,3)
print(arr)

# 数组中有一个满足条件则返回True
print(np.any(arr>0))

# 数组中全部满足条件返回True
print(np.all(arr>0))

4、去重排序函数

# 去重排序函数
arr = np.array([[1,2,1],[2,3,4]])
print(arr)

# 找到唯一值并返回排序结果,类似于python的set集合,返回一个一维数组
print(np.unique(arr))

ndarray的矩阵操作

1、算数运算符.加减乘除

n1 = np.random.randint(0, 10, size=(4, 5))
print(n1)
print(n1+2)
print(np.add(n1, 2)) # 效果和上句一样

2、矩阵积

n1 = np.random.randint(1, 5, (2, 3))
n2 = np.random.randint(1, 5, (3, 2))
print(n1)
print(n2)
print(np.dot(n1, n2))

3、广播机制,维度不对应自动补全0

a = np.arange(3).reshape((3, 1))
b = np.arange(3)
c = a + b
print(a)
print(b)
print(c)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值