Numpy 基础学习

本文介绍了Numpy的基础知识,包括基础运算、array的查找、赋值、合并与分割等核心概念,是Python进行数据分析和机器学习的重要工具。
摘要由CSDN通过智能技术生成

基础运算

a = np.array([1,2,3,4]).reshape((2,2))
b = np.arange(4).reshape((2,2))

c = a-b
d = a*b
# 矩阵对应数相乘
e1 = np.dot(a, b)
e2 = a.dot(b)
# 矩阵乘法

print(a<3)
# 可以对矩阵元素进行逻辑运算 返还ture或flose

a = np.random.random((2,4))
# np中random和平常random类似  如果random.random((2,4)) 生产2行4列,0~1之间随机数
# 如果数据已经是array 有些可以直接写成  A.sum() 和np.sum(A) 一样
a_sum = np.sum(a)
a_min = np.min(a)
a_max = np.max(a)
# 还可以只求行 或者列 最大最小 求和
a_max_c = np.max(a,axis=1)
a_max_r = np.max(a,axis=0)
#  axis=1 返还每行的最大值 返还一个列表
#  axis=0 返还每列的最大值  返还一个列表

print(np.argmax(a))
# a中最大值的索引值   还有  argmix
print(np.mean(a))
# a的均值
print(np.average(a))
# average平均值
print(np.median(a))
# median 中位数
print(np.cumsum(a))
# a的累加函数 结果 [ 2  5  9 14 20 27 35 44 54 65]
print(np.diff(a))
# 累差函数 每一行中后一项与前一项之差
print(np.sort(a))
# 和sort函数类似  进行一种排列
print(np.transpose(a))
print(a.T)
# 以上两种方法都是对a进行转置
print(np.clip(a,5,10))
# clip(修剪) clip(Array,Array_min,Array_max) 对于a中小于Array_min的值将其替换成Array_min,Array_max 对于超过的替换

array 的查找

a = np.arange(3,15).reshape((3,4))
print(a,'\n')
print(a[2])
# 对于矩阵索引的第一个[]就是第几行, 如上结果是a的第二行
print(a[1][1])
print(a[1,1])
# 具体到某个位置 上面结果2行2列的数  上面两种表示方式相同
print(a[1,1:4])
# 相当于切片也可以 [1:,2] 第二行的2~5列
print("---------")
for row in a:
    print('\n',row)
# for循环会逐行进行打印 没有逐列打印的直接方式 可以对a转置在逐列如下
print("---------")
for col in a.T:
    print('\n',col)

# 如果想迭代矩阵的所有元素,需要将其转为一行,使用  a.flat(这是一个迭代器不是array,如果想看array要 a.flatten())
print("---------")
print(a.flatten())
for item in a.flat:
    print(item)

array 的赋值

# 赋值 copy
a = [1,2,3,4,5]
b = a
c = b
print(b)
print(c)
# 如果改变a的值或者b的值 所有abc 都会变化 因为如果直接 a = b 相当于a与b关联
a[1] = 10
print(a)
print(b)
# 对于只想赋值其相同值而不关联 需要 b = a.copy()
q = a.copy()
print('q', q)
a[2] = 9
print(b) # [1, 10, 9, 4, 5]
print(q) # [1, 10, 3, 4, 5]

array 合并

# 对矩阵进行合并  hstack vstack
a = np.array([1,2,3])
b = np.array([11,22,33])
print(np.vstack((a,b)))  # vertical(垂直) stack
print(np.hstack((a,b))) # horizontal(水平) stack
print("---------")
# 对于一个行向量,如果用前面的转置方法(.T或transpose) 无法进行转置,因为其不是一个array
# 注意里面是()
print(a.T)   # 仍然是[1 2 3]
# 方法 np.newaxis()
print("---------")
print(a[:,np.newaxis])
# 在要转置的向量后面直接加就可以,但是newaxis()不能作用于矩阵

# 多个array连接  可以还是使用vstack或者hstack  还可以使用concatenate((x,y)) 可以通过axis 选择合并的方向
# 下面两种效果一样
print(np.vstack((a,b,a)),"\n")
print(np.concatenate((a,b,a))) 

array 的分割

a = np.arange(12).reshape((3,4))
print(a)
print('\n',np.split(a,2,axis=1))  #如果不写axis 默认是axis=0(矩阵上下分块)

# 有时想要不等量分割  如对于下面这个矩阵想要竖着分成三份 可以  arrary_split
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]
print('\n',np.array_split(a,3,axis=1))
# 但不知道如何控制想要的结果,还需要学习

# 还可以使用vsplit(垂直分割) 和hsplit  基本上用不到,上面就够了
print(np.hsplit(a,3)) # 等于 print(np.split(a,2,axis=1))

补充

# np.where 是三元表达式向量化版本,而且where第二,三个参数不需要是数组,可以是标量
a = np.array([1,2,3,4])
b = np.array([6,7,8,9])
c = np.array([True, False, True, False])
result = np.where(c,a,b)  # [1, 7, 3, 9]
# 如果想要将一组数中的某些数替换成标量
a = np.random.randn(4,4)
a1 = np.where(a > 0, "a", 3)  # 将a中大于0的换成a小于的换成3
a2 = np.where(a < 0, 2, a) # 只讲a中小于0的替换
# a1 [['3' '3' '3' 'a']
 ['a' '3' 'a' 'a']
 ['a' '3' 'a' 'a']
 ['3' 'a' 'a' 'a']]
# a2 [[2.         2.         2.         0.25344902]
 [2.27838389 2.         1.44099603 1.32540036]
 [0.16570196 2.         1.34380092 2.20212735]
 [2.         1.15632934 2.28351864 1.68879952]]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值