【python数据挖掘之numpy】数组合并+切片+索引

本文详细介绍了使用numpy进行数组操作,包括数组重塑、水平和垂直堆叠、按固定大小或条件分割,以及一维和多维数组的索引和切片。同时讨论了数组复制的概念。
摘要由CSDN通过智能技术生成

目录

一、数组变换

二、数组合并

三、数组分割

四、数组索引和切片


一、数组变换

1数组重塑

对于定义好的数组我们可以通过reshape()函数改变数据维度,输入的参数为新维度的一个元组

import numpy as np
arr1 = np.arange(36)
print('arr1:\n',arr1)
arr2=arr1.reshape(6,6)
print('arr2:\n',arr2)
arr3 = arr1.reshape(6,-2)
print('arr3:\n',arr3)
#结果如下
# arr1:
#  [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#  24 25 26 27 28 29 30 31 32 33 34 35]
# arr2:
#  [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]
#  [12 13 14 15 16 17]
#  [18 19 20 21 22 23]
#  [24 25 26 27 28 29]
#  [30 31 32 33 34 35]]
# arr3:
#  [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]
#  [12 13 14 15 16 17]
#  [18 19 20 21 22 23]
#  [24 25 26 27 28 29]
#  [30 31 32 33 34 35]]

二、数组合并

数组合并是数据处理中需要经常使用到的,numpy利用hstack() vstack() concatenate()函数来完成数组的合并

2.1 np.concatenate():将两个或多个数组沿指定轴连接

import numpy as np

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

print(c)  # [1 2 3 4 5 6]
 

2.2 np.vstack():按垂直方向(行方向)堆叠数组。

import numpy as np

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

print(c)
# [[1 2 3]
#  [4 5 6]]
 

 2.3 np.hstack():按水平方向(列方向)堆叠数组。

import numpy as np

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

print(c)  # [1 2 3 4 5 6]
 

2.4 np.column_stack():按列方向堆叠一维数组为二维数组。

import numpy as np

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

print(c)
# [[1 4]
#  [2 5]
#  [3 6]]
 

2.5 np.row_stack():按行方向堆叠一维数组为二维数组。

import numpy as np

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

print(c)
# [[1 2 3]
#  [4 5 6]]
 

三、数组分割

数组分割是指将一个数组中的元素按照某种规则分割成多个子数组。常见的分割规则包括按照固定大小分割、按照特定值或条件分割等。numpy提供hsplit()、vsplit()、 split()

import numpy as np
arr = np.arange(16).reshape(4,4)
print('横向分割为:\n',np.hsplit(arr,2))
print('纵向组合为:\n',np.vsplit(arr,2))
# 横向分割为:
#  [array([[ 0,  1],
#        [ 4,  5],
#        [ 8,  9],
#        [12, 13]]), array([[ 2,  3],
#        [ 6,  7],
#        [10, 11],
#        [14, 15]])]
# 纵向组合为:
#  [array([[0, 1, 2, 3],
#        [4, 5, 6, 7]]), array([[ 8,  9, 10, 11],
#        [12, 13, 14, 15]])]

四、数组索引和切片

4.1 索引和切片(一维)

arr = np.arange(20)
print(arr)
print(arr[6])
print(arr[-6])
print(arr[3:6])
# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
# 6
# 14
# [3 4 5]

4.2 索引和切片(多维)

import numpy as np
arr = np.arange(18).reshape(3,6)
print(arr)
print(arr[1,2:6])  #索引第1行中第2列到第6列的元素
print(arr[:,4])   #索引第4列元素
print('result1:',arr[(0,1),(1,3)])           
print('result2:',arr[1:2,(0,2,3)])            #索引第1、2行中第0、2、3列的元素
data = np.array([1,0,1],dtype = np.bool_)    #data是一个布尔数组,它索引第0,2行中第1列元素
print('result3:',arr[data,1])

# [[ 0  1  2  3  4  5]
#  [ 6  7  8  9 10 11]
#  [12 13 14 15 16 17]]
# [ 8  9 10 11]
# [ 4 10 16]
# result1: [1 9]
# result2: [[6 8 9]]
# result3: [ 1 13]

4.3  数组copy(复制)

arr1 = arr[-4:-1].copy()
print(arr)
print(arr1)

# [ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
# [16 17 18]

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值