机器学习--准备数据与Numpy(七)--

数组重塑

reshape重塑数组

-1自动推导维度大小

# -*- coding: utf-8 -*-

import numpy as np

print("将一维数组转换为二维数组")
arr = np.arange(8)
print(arr.reshape((4, 2)))
print(arr.reshape((4, 2)).reshape((2, 4))) # 支持链式操作
print

print("维度大小自动推导")
arr = np.arange(15)
print(arr.reshape((5, -1)))
print

print("获取维度信息并应用")
other_arr = np.ones((3, 5))
print(other_arr.shape)
print(arr.reshape(other_arr.shape))
print()

print("高维数组拉平")
arr = np.arange(15).reshape((5, 3))
print(arr.ravel())


将一维数组转换为二维数组
[[0 1]
 [2 3]
 [4 5]
 [6 7]]
[[0 1 2 3]
 [4 5 6 7]]
维度大小自动推导
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]
 [12 13 14]]
获取维度信息并应用
(3, 5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]

高维数组拉平
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]

高级应用 数组的合并和拆分


数组连接函数

类型说明
concatenate最一般化的连接,沿一条轴连接一组数组
vstack, row_stack以面向行的方式对数组进行堆叠(沿轴0)
hstack,以面向行的方式对数组进行堆叠(沿轴1)
column_stack类似于hstack,但是会先将一维数组转换为二维列向量。
dstack以面向“深度”的方式对数组进行堆叠(沿轴2)
split沿指定轴在指定的位置拆分数组
hsplit, vsplit, dsplitsplit的便捷化函数,分别沿着轴0、轴1和轴2进行拆分。


• _r对象
• _c对象


# -*- coding: utf-8 -*-

import numpy as np
import numpy.random as np_random


print('连接两个二维数组')
arr1 = np.array([[1, 2, 3], [4, 5, 6]])
arr2 = np.array([[7, 8, 9], [10, 11, 12]])
arr3 = np.array([[13, 14, 15], [16, 17, 18]])
print(np.concatenate([arr1, arr2], axis = 0))  # 按行连接
print(np.concatenate([arr1, arr2], axis = 1))  # 按列连接
print(np.concatenate([arr1, arr2, arr3], axis = 1))  # 按列连接
print()

# 所谓堆叠,参考叠盘子。。。连接的另一种表述
print('垂直stack与水平stack')
print(np.vstack((arr1, arr2))) # 垂直堆叠
print(np.hstack((arr1, arr2))) # 水平堆叠
print(np.hstack((arr1, arr2, arr3))) # 水平堆叠
print()

print('拆分数组')
arr = np_random.randint(0, 9,size=(5,5))
print(arr)
print('水平拆分')
# numpy.split(),用于拆分数组
# arr,需要进行拆分的数组
# [x,y,z,...],按数组进行拆分,x等表示要拆分的行(列),如拆分成[0,...,x-1],[x,...,y-1],[...]组成的多个子数组
# axis = n,表示按轴n进行拆分。
first, second, third = np.split(arr, [1, 3], axis = 0)
print('first')
print(first)
print('second')
print(second)
print('third')
print(third)
print('垂直拆分')
first, second, third = np.split(arr, [1, 3], axis = 1)
print('first')
print(first)
print('second')
print(second)
print('third')
print(third)
print()

# 堆叠辅助类
arr = np.arange(6)
arr1 = arr.reshape((3, 2))
print(arr1)
arr2 = np_random.randint(6,size=(3, 2))
print(arr2)
print('r_用于按行堆叠')
print(np.r_[arr1, arr2])
print('c_用于按列堆叠')
print(np.c_[np.r_[arr1, arr2], arr])
print('切片直接转为数组')
print(np.c_[1:6, -10:-5])


连接两个二维数组
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]
[[ 1  2  3  7  8  9 13 14 15]
 [ 4  5  6 10 11 12 16 17 18]]

垂直stack与水平stack
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]
[[ 1  2  3  7  8  9 13 14 15]
 [ 4  5  6 10 11 12 16 17 18]]

拆分数组
[[7 4 7 5 2]
 [5 2 1 7 1]
 [7 5 2 5 0]
 [3 7 1 3 5]
 [8 8 2 0 7]]
水平拆分
first
[[7 4 7 5 2]]
second
[[5 2 1 7 1]
 [7 5 2 5 0]]
third
[[3 7 1 3 5]
 [8 8 2 0 7]]
垂直拆分
first
[[7]
 [5]
 [7]
 [3]
 [8]]
second
[[4 7]
 [2 1]
 [5 2]
 [7 1]
 [8 2]]
third
[[5 2]
 [7 1]
 [5 0]
 [3 5]
 [0 7]]

[[0 1]
 [2 3]
 [4 5]]
[[5 1]
 [1 3]
 [3 1]]
r_用于按行堆叠
[[0 1]
 [2 3]
 [4 5]
 [5 1]
 [1 3]
 [3 1]]
c_用于按列堆叠
[[0 1 0]
 [2 3 1]
 [4 5 2]
 [5 1 3]
 [1 3 4]
 [3 1 5]]
切片直接转为数组
[[  1 -10]
 [  2  -9]
 [  3  -8]
 [  4  -7]
 [  5  -6]]


元素的重复操作


• _tile 对数组进行操作,复制整个数组元素。
• _repeat 对元素进行操作,复制元素。


# -*- coding: utf-8 -*-

import numpy as np
import numpy.random as np_random

# numpy.repeat() 可以按行(列)复制元素
print('Repeat: 按元素')
arr = np.arange(3)
print(arr.repeat(3))
print(arr.repeat([2, 3, 4])) # 3个元素,分别复制2, 3, 4次。长度要匹配!
print()

print('Repeat,指定轴')
arr = np_random.randint(10,size=(2, 2))
print(arr)
print(arr.repeat(2, axis = 0)) # 按行repeat
print(arr.repeat(2, axis = 1)) # 按列repeat
print()

# numpy.title() 完整复制数组,形成新数组,类似把数组当成一块瓷砖,复制瓷砖。
print('Tile: 参考贴瓷砖')
print(np.tile(arr, 2))
print(np.tile(arr, (2, 3)))  # 指定每个轴的tile次数

Repeat: 按元素
[0 0 0 1 1 1 2 2 2]
[0 0 1 1 1 2 2 2 2]

Repeat,指定轴
[[4 8]
 [6 0]]
[[4 8]
 [4 8]
 [6 0]
 [6 0]]
[[4 4 8 8]
 [6 6 0 0]]
[[4 8]
 [4 8]
 [6 0]
 [6 0]]

Tile: 参考贴瓷砖
[[4 8 4 8]
 [6 0 6 0]]
[[4 8 4 8 4 8]
 [6 0 6 0 6 0]
 [4 8 4 8 4 8]
 [6 0 6 0 6 0]]


花式索引的等价函数

• take 取出数组中索引的值所组成的新数组
• put 更新或替换数组对应索引位置的元素值。


# -*- coding: utf-8 -*-

import numpy as np
import numpy.random as np_random

print('Fancy Indexing例子代码')
arr = np.arange(10)
inds = [7, 1, 2, 6]
print(arr[inds])
# 花式索引栗子
# 即把数组arr的第inds个索引值即arr[7],arr[1],arr[2],arr[6]所组成的数组打印出来。
print()

# numpy.take(arr,inds)等同于花式索引方法。也是取出索引inds值的数组。
print('使用take')
print(arr.take(inds))
print()

# numpy.put()类似使用花式索引更新数组元素。
print('使用put更新内容')
# 将arr数组中的inds位置元素全部替换为元素值5。
arr.put(inds, 5)
print(arr)
# inds = [7, 1, 2, 6]
# 这里需要注意inds和[11, 12, 13, 14]必须是同型的。
arr.put(inds, [11, 12, 13, 14])
print(arr)
print()

print('take,指定轴')
arr = np_random.randint(10,size=(2, 4))
inds = [2, 0, 2, 1]
print(arr)
print(arr.take(inds, axis = 1))  # 按列take


Fancy Indexing例子代码
[7 1 2 6]

使用take
[7 1 2 6]

使用put更新内容
[0 5 5 3 4 5 5 5 8 9]
[ 0 12 13  3  4  5 14 11  8  9]

take,指定轴
[[8 8 0 5]
 [4 7 5 1]]
[[0 8 0 8]
 [5 4 5 7]]




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值