社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python之numpy数组学习(三)

CDA数据分析师 • 8 年前 • 786 次点击  

作者  Airy
本文转自AiryData,转载需授权


前言

前面我们学习了numpy库的简单应用和数组的处理,今天来学习下比较重要的如何拆分数组。


拆分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]]])]


Numpy数组的属性

除了shapedtype属性外,ndarray类型的属性还很多。

ndim属性存储的是维度的数量。

size属性用来保存元素的数量。

itemsize属性可以返回数组中各个元素所占用的字节数。

nbytes属性存储整个数组所需的字节数量。这个属性的值正好是itemsizesize属性值的积。

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 犯过的错误



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/weixin/TfIrS8o4uh
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2051
 
786 次点击