(4)numpy数组的常规操作

内容:

·numpy数组的变形

·numpy数组的级联

·numpy数组的切分

·numpy副本

首先,导入numpy第三方包:

import numpy as np

变形

# numpy数组的变形:
# 在变形时,变形之前的元素个数=变形之后的元素个数,元素个数在变形前后必须具有统一性
# 得到一个元素个数为20个的numpy数组:
arr = np.random.randint(0, 100, size=(20))
# 输出数组arr
print(arr)
# 对得到的数组arr进行变形,划分条件以元组的形式传入,将其划分成“四行五列”,元素个数保持不变:
print(arr.reshape((4, 5)))

运行结果

级联:

        numpy数组的级联由两种方法,第一种是通过axis的传入参数,来控制级联时横向进行,还是纵向进行的;第二种是numpy方法,直接进行控制。

首先,先定义两个numpy数组:

# numpy数组的级联:
arr_1 = np.random.randint(0, 50, size=(3, 3))
arr_2 = np.random.randint(0, 50, size=(3, 3))

第一种:通过axis控制联接方向

# 通过axis控制联接方向
# axis=0:纵向联接
# axis=1:横向联接
# 不管是纵向联接,还是横向联接,数据都会自己进行维度的变更
print("横向联接:\n", np.concatenate((arr_1, arr_2), axis=1))
print("纵向联接:\n", np.concatenate((arr_1, arr_2), axis=0))

运行结果

第二种:通过numpy方法直接进行控制:

hstack: 横向联接,传入参数为元组,元组元素个数有且为2

vstack: 横向联接,传入参数为元组,元组元素个数有且为2

# hstack: 横向联接,传入参数为元组,元组元素个数有且为2
print("横向联接:\n", np.hstack((arr_1, arr_2)))
# vstack: 横向联接,传入参数为元组,元组元素个数有且为2
print("纵向联接:\n", np.vstack((arr_1, arr_2)))

运行结果

 切分:

【问】:切分和切片有什么区别?

【答】:切分和切片从本质上讲,都是对一组或者多组数据进行分片处理;在切片时,会按照要求对原数据进行处理,从而得到用户想要的数据,但在这个过程中,不会伤及到原数据;而在切分时,则是直接在原数据上进行操作,不保留原数据。

切分也有三种方法,一种是通过axis的参数来确定是横向切分,还是纵向切分;另一种是通过numpy方法,直接进行操作;最后一种是等价切分。

生成一个6行6列的numpy数组:

arr = np.random.randint(0, 100, size=(6, 6))
print(arr)

第一种:

指定划分,indices_or_sections=[a, b],在划分时,第一块0:a,第二块a:b,第三块b:最后

part_1, part_2, part_3 = np.split(arr, indices_or_sections=[1, 5], axis=0)
print("part_1:下标从0开始\n", part_1)
print("part-2:下标从1开始\n", part_2)
print("part_3:下标从5开始\n", part_3)

运行结果

第二种:

横向:np.hsplit

纵向:np.vsplit

# 横向切分:
print("横向切分:\n", np.hsplit(arr, indices_or_sections=[1, 5]))
# 纵向切分:
print("纵向切分:\n", np.vsplit(arr, indices_or_sections=[1, 5]))

运行结果

第三种:

限制条件:被切割数组的第一维度a,必须可以整除被切割的份数b,也就是a%b==0恒成立

part_1, part_2 = np.split(arr, indices_or_sections=2)
print("part_1:\n", part_1)
print("part_2:\n", part_2)

运行结果

numpy副本:

对一组原始数据进行副本创建,可以保证副本的内存位置和原始数据的内存位置不一致

arr = np.random.randint(0, 100, size=(3, 3))
arr_copy = arr.copy()
print("arr:\n", arr)
print("arr_copy:\n", arr_copy)

运行结果

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弦之森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值