作者 Airy
本文转自AiryData,转载需授权
前面我们学习了numpy库的简单应用和数组的处理,今天来学习下比较重要的如何拆分数组。
数组可以从纵向、横向和深度方向来拆分数组,相关函数有hsplit()、vsplit()、sdplit()和split()。我们既可以把数组分成相同形状的数组,也可以从规定的位置开始切取数组(先介绍,代码在后)。
横向拆分:对于一个3×3数组,可以沿着横轴方向将其分解为3部分,并且各部分的大小和形状完全一致。
纵向拆分:vsplit()函数将沿着纵轴方向分解数组。当参数axis=0时,split()函数也会沿着纵轴方向分解数组。
深向拆分:dsplit()函数会沿着深度方向分解数组。
下面看一下代码(建议访问原文链接查看规范代码):
#-*- coding:utf-8 -*-
import numpy as np
a = np.arange(9).reshape(3, 3)
print (a)
#Out:
#array([[0, 1, 2],
# [3, 4, 5],
# [6, 7, 8]])
#横向拆分
print (np.hsplit(a, 3))
#Out:
#[array([[0],
# [3],
# [6]]),
# array([[1],
# [4],
# [7]]),
# array([[2],
# [5],
# [8]])]
print (np.split(a, 3, axis=1))
#Out:
#[array([[0],
# [3],
# [6]]),
# array([[1],
# [4],
# [7]]),
# array([[2],
# [5],
# [8]])]
#纵向拆分
print (np.vsplit(a, 3))
#Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
print (np.split(a, 3, axis=0))
#Out: [array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]
c = np.arange(27).reshape(3, 3, 3)
print (c)
#Out:
#array([[[ 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]]])
#深向拆分
print (np.dsplit(c, 3))
#Out:
#[array([[[ 0],
# [ 3],
# [ 6]],
#
# [[ 9],
# [12],
# [15]],
#
# [[18],
# [21],
# [24]]]),
# array([[[ 1],
# [ 4],
# [ 7]],
#
# [[10],
# [13],
# [16]],
#
# [[19],
# [22],
# [25]]]),
# array([[[ 2],
# [ 5],
# [ 8]],
#
# [[11],
# [14],
# [17]],
#
# [[20],
# [23],
# [26]]])]
除了shape和dtype属性外,ndarray类型的属性还很多。
ndim属性存储的是维度的数量。
size属性用来保存元素的数量。
itemsize属性可以返回数组中各个元素所占用的字节数。
nbytes属性存储整个数组所需的字节数量。这个属性的值正好是itemsize和size属性值的积。
T属性的作用和transpose()函数相同。
如果数组的秩(rank)小于2,那么所得只是一个数组的视图。
对于numpy来说,复数用j表示。
real属性将返回数组的实部,当数组元素全为实数时,就返回数组本身。
如果数组有复数,那么它的数据类型将自动变为复数类型。
flat属性可返回一个numpy.flatiter对象,这是获得flatiter对象的唯一方法。给flat属性赋值时,这个值会覆盖整个数组内所有的值,所以建议不要赋值。
下面用代码说明numpy数组的各种属性的详细用法。
#-*- coding:utf-8 -*-
import numpy as np
b = np.arange(24).reshape(2, 12)
print (b)
#Out:
#array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
# [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]])
print (b.ndim)
#Out: 2
print (b.size)
#Out: 24
print (b.itemsize)
#Out: 8
print (b.nbytes)
#Out: 192
print (b.size * b.itemsize)
#Out: 192
print (b.resize(6,4))
print (b)
#Out:
#array([[ 0, 1, 2, 3],
# [ 4, 5, 6, 7],
# [ 8, 9, 10, 11],
# [12, 13, 14, 15],
# [16, 17, 18, 19],
# [20, 21, 22, 23]])
print (b.T)
#Out:
#array([[ 0, 4, 8, 12, 16, 20],
# [ 1, 5, 9, 13, 17, 21],
# [ 2, 6, 10, 14, 18, 22],
# [ 3, 7, 11, 15, 19, 23]])
print (b.ndim)
#Out: 1
print (b.T)
#Out: array([0, 1, 2, 3, 4])
b = np.array([1.j + 1, 2.j + 3])
print (b)
#Out: array([ 1.+1.j, 3.+2.j])
print (b.real)
#Out: array([ 1., 3.])
print (b.imag)
#Out: array([ 1., 2.])
print (b.dtype)
#Out: dtype('complex128')
print (b.dtype.str)
#Out: '
b = np.arange(4).reshape(2,2)
print (b)
#Out:
#array([[0, 1],
# [2, 3]])
f = b.flat
print (f)
#Out:
for it in f:
print (it)
#0
#1
#2
#3
print (b.flat[2])
#Out: 2
print (b.flat[[1,3]])
#Out: array([1, 3])
print (b)
#Out:
#array([[7, 7],
# [7, 7]])
b.flat[[1,3]] = 1
print (b)
#Out:
#array([[7, 1],
# [7, 1]])
我们可以把numpy数组转换成Python列表,使用tolist()函数。
astype()函数可以把数组元素转换成指定类型。
PS.当complex类型转换成int类型时,虚部将被丢弃,另外,还需要将数据类型的名称以字符串的形式传递给astype()函数。
下面看一下代码:
#-*- coding:utf-8 -*-
import numpy as np
b = np.array([ 1.+1.j, 3.+2.j])
print (b)
#Out: array([ 1.+1.j, 3.+2.j])
print (b.tolist())
#Out: [(1+1j), (3+2j)]
print (b.tostring())
#Out: b'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x00@'
print (np.fromstring(b'\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x08@\x00\x00\x00\x00\x00\x00\x00@', dtype=complex))
#Out: [ 1.+1.j, 3.+2.j]
print (np.fromstring('20:42:52',sep=':', dtype=int))
#Out: [20, 42, 52]
print (b)
#Out: [ 1.+1.j, 3.+2.j]
print (b.astype(int))
#d:/Anaconda3/Scripts/ipython-script.py:1: ComplexWarning: Casting complex values to real discards the imaginary part
# if __name__ == '__main__':
#Out: [1 3]
print (b.astype('complex'))
#Out: [ 1.+1.j, 3.+2.j]
今天学习一下Python中numpy的数组拆分和其他属性。希望通过上面的操作能帮助大家。如果你有什么好的意见,建议,或者有不同的看法,我都希望你留言和我们进行交流、讨论。
推荐阅读
【书单】18本数据科学家必读的R语言和Python相关书籍
如何像数据科学家一样思考
北京VS上海,哪座城市人口更多?
我是如何一不小心阻止了勒索病毒的全球蔓延
用python抓取摩拜单车API数据并做可视化分析(源码)
2017年大数据和数据科学的六大发展趋势
你每天要花多少时间在手机上?
初级数据科学家求职时的 3 大必备能力
不可错过的优质深度学习课程
职场 | 数据库面试常问的一些基本概念
听说你最擅长“拖”,你“拖”得过Excel吗?
数据科学优质课程推荐#2:统计入门课程篇
歌手外科和猴姑,大数据告诉你白百何出轨后谁最惨
想学习数据科学?我们整理了一份优质编程入门课程清单
数据科学家在美国仍然是最热门工作的3大原因
一个优秀数据分析师的准则
Python 实现一个火车票查询的工具
干货 | 携程实时用户行为系统实践
数据分析证明最靠谱的电影评分网站不是 IMDB, 也不是烂番茄,而是...
那些年,写 Python 犯过的错误