利用Python进行数据分析(4)-Numpy库

0. 回顾

        之前我们学习了单个数组的操作方法,这一节我们将学习多个数组的操作。

1. 数组操作 

1.1 连接数组

         利用vstack()函数执行垂直入栈操作,即沿着第一个轴进行操作。

        示例1

import numpy as np

a = np.arange(8).reshape([2, 4])
print('a:', a)
b = np.arange(8, 16).reshape([2, 4])
print('b:', b)
c = np.vstack([a, b])
print('c:', c)

        运行结果为:

a: [[0 1 2 3]
 [4 5 6 7]]
b: [[ 8  9 10 11]
 [12 13 14 15]]
c: [[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]
 [12 13 14 15]]

        可以看到,此时,b矩阵在列上进行添加。

        示例2:利用hstack()函数执行行操作。

import numpy as np

a = np.arange(8).reshape([2, 4])
print('a:', a)
b = np.arange(8, 16).reshape([2, 4])
print('b:', b)
c = np.hstack([a, b])
print('c:', c)

        运行结果为:

a: [[0 1 2 3]
 [4 5 6 7]]
b: [[ 8  9 10 11]
 [12 13 14 15]]
c: [[ 0  1  2  3  8  9 10 11]
 [ 4  5  6  7 12 13 14 15]]
1.2 数组切分

        同样,对于切分,也有相似的操作。

        示例3:利用hsplit()函数进行行操作,即垂直切分。

import numpy as np

a = np.arange(8).reshape([2, 4])
print('a:', a)
d, e = np.hsplit(a, 2)
print('d:', d)
print('e:', e)

        运行结果为:

a: [[0 1 2 3]
 [4 5 6 7]]
d: [[0 1]
 [4 5]]
e: [[2 3]
 [6 7]]

        示例4:利用vsplit()函数进行操作,即垂直切分。

import numpy as np

a = np.arange(8).reshape([2, 4])
print('a:', a)
d, e = np.vsplit(a, 2)
print('d:', d)
print('e:', e)

        运行结果为:

a: [[0 1 2 3]
 [4 5 6 7]]
d: [[0 1 2 3]]
e: [[4 5 6 7]]

        示例5:利用split进行分割,这个可以将数组分为几个不对称的部分。

import numpy as np

a = np.arange(8).reshape([2, 4])
print('a:', a)
d, e, f = np.split(a, [1, 3], axis=1)
print('d:', d)
print('e:', e)
print('f:', f)

        运行结果为:

a: [[0 1 2 3]
 [4 5 6 7]]
d: [[0]
 [4]]
e: [[1 2]
 [5 6]]
f: [[3]
 [7]]

        可以看到,此时axis=1则是从【0 1 2 3】开始划分,【1, 3】则是第一部分从开始到第一行,也就是0,第二部分从第一行到第三行,不包括第三行,也就是【1 2】,最后就是第三行到最后,也就是3,整个是从第0行开始计算。

2. 常用概念

2.1 对象的副本或视图 

        跟Python的机制相似,此时会有副本和视图的区别。其中,赋值运算不会为数组创建副本,只是数组的一个视图。

        示例6

import numpy as np

a = np.arange(8).reshape([2, 4])
b = a
print(b)
a[0] = 2
print(b)

        运行结果为:

[[0 1 2 3]
 [4 5 6 7]]
[[2 2 2 2]
 [4 5 6 7]]

         可以看到,此时改变a的值,b的值也会跟着改变。

        示例7:利用切片进行操作,这与Python不同,Python得到的是副本,而numpy得到的是视图。

import numpy as np

a = np.arange(8).reshape([2, 4])
b = a[:, 0:2]
print(b)
a[0, 0] = 2
print(b)

         运行结果为:

[[0 1]
 [4 5]]
[[2 1]
 [4 5]]

         如果想得到数组的副本,则利用copy()函数进行操作。

        示例8

import numpy as np

a = np.arange(8).reshape([2, 4])
b = np.copy(a)
print(b)
a[0, 0] = 2
print(b)

        运行结果为:

[[0 1 2 3]
 [4 5 6 7]]
[[0 1 2 3]
 [4 5 6 7]]

        可以看到,此时改变a数组的值,b数组并没有发生改变,故此时为创建了一个副本,且numpy的副本是深拷贝,两个数组是完全独立的。

2.2 广播机制

        广播机制是针对两个形状不同的矩阵进行的,最简单的情况是一个为多维数组,另一个为一维数组。

        示例9

import numpy as np

a = np.arange(8).reshape([2, 4])
b = np.arange(4)
print(a)
print(b)
print(a + b)

        运行结果为:

[[0 1 2 3]
 [4 5 6 7]]
[0 1 2 3]
[[ 0  2  4  6]
 [ 4  6  8 10]]

        可以看到,此时是b进行复制跟a同维度之后再进行运算的。

        示例10:

import numpy as np

a = np.arange(8).reshape([2, 4, 1])
b = np.arange(8).reshape([2, 1, 4])
print(a + b)

        运行结果为:

[[[ 0  1  2  3]
  [ 1  2  3  4]
  [ 2  3  4  5]
  [ 3  4  5  6]]

 [[ 8  9 10 11]
  [ 9 10 11 12]
  [10 11 12 13]
  [11 12 13 14]]]

3. 数组数据文件的读写

3.1 二进制文件的读写、

        numpy的save()函数利用二进制格式保存数据。

        示例11:save()函数保存数组。

import numpy as np

a = np.random.random(8).reshape([2, 4])
print(a)
np.save('a', a)

        此时就成功保存了,要读取则利用load()函数。

        示例12:load()函数读取数组。

import numpy as np

a = np.load('a.npy')
print(a)

        运行结果为:

[[0.89027157 0.63726405 0.28353646 0.00572878]
 [0.23007697 0.54250798 0.31191131 0.54195333]]
3.2 读取文件中列表形式数据

        numpy可以利用genfromtxt()函数进行读取,不过,现在较为常用的是利用pandas库进行实现的,故在此不做较多的叙述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值