入门numpy(50%-65%)【解读numpy官方文档】
(点击上方Python爱好者社区,可快速关注)
作者:王大伟
博客专栏:https://www.hellobi.com/u/wangdawei/articles
Python爱好者社区 唯一小编
前言
这几天很忙啊,所以也没时间静下心来写文章,现在好点了,我们继续numpy官网之旅
import numpy as np
形状操作
改变数组的形状
a = np.floor(10*np.random.random((3,4)))
a
a.resize((2,6))
a
注:改变a数组形状
如果在改变形状操作中将尺寸给定为-1,则会自动计算其尺寸:
a.reshape(3,-1)
查看这部分更多更详细的用法可以看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
下图部分:
堆叠不同的数组
几个数组可以沿不同的轴堆叠在一起:
a = np.floor(10*np.random.random((2,2)))
a
b = np.floor(10*np.random.random((2,2)))
b
np.vstack((a,b))
注:这里v是vertical的缩写,意思是垂直方向,所以这里是按照竖直方向堆叠数组
np.hstack((a,b))
注:这里的h是horizontal的缩写,是水平方向,所以这里是指的水平方向堆叠数组
函数column_stack将1维数组作为列堆叠成2维数组。
from numpy import newaxis
np.column_stack((a,b))
注:水平方向堆叠成二维数组
a = np.array([4.,2.])
b = np.array([2.,8.])
a[:,newaxis]
注:切片出二维数组
np.column_stack((a[:,newaxis],b[:,newaxis]))
注:将两个切片的二维数组组成新的二维数组
np.vstack((a[:,newaxis],b[:,newaxis]))
注:竖直方向堆叠出新的二维数组
注意:在复杂情况下,r_和c_对于通过沿一个轴堆叠数字来创建数组很有用。 它们允许使用范围文字(“:”)
np.r_[1:4,0,4]
注:1—3,0,4组成数组
当使用数组作为参数时,r_和c_在其默认行为中类似于vstack和hstack,但允许使用可选参数来指定要连接的轴数。
查看这部分更多更详细的用法可以看:https://docs.scipy.org/doc/numpy-dev/user/quickstart.html
下图部分:
将一个数组分成几个较小的数组
使用hsplit,可以沿着水平轴拆分数组,方法是指定要返回的等同形状数组的数量,或者指定之后应该进行拆分的列
a = np.floor(10*np.random.random((2,12)))
a
np.hsplit(a,3)
注:将a数组水平方向切分成相等的3份
np.hsplit(a,(3,4))
注:从第三个和第四个后面分别切一刀,水平分成3块新数组
np.hsplit(a,(3,))
注:从第三个后面切一刀,水平分成2块新数组
vsplit沿垂直轴分割,而array_split允许用来指定要分割的轴:
np.vsplit(a,(1,))
注:从第一行后面切一刀,垂直分成2块新数组
复制和视图
当操作数组时,它们的数据有时被复制到一个新的数组中,有时候不会。 这往往是初学者混乱的根源。 有三种情况:
没有复制的情况
简单的赋值不会使数组对象或其数据被复制
a = np.arange(12)
b = a
b is a
注:这里a和b指向的是同一个数组,操作时并没有产生新的复制内容
b.shape = 3,4
a.shape
注:这里改变b数组的形状,a的也发生了变化,说明这里a和b指向的是同一个数组
Python将可变对象作为引用传递,因此函数调用不会复制一份新的
def f(x):
print(id(x))
id(a)
f(a)
注:这里函数返回的结果id是相同的,所以函数调用不会复制一份新的内容(id是对象的唯一标识)
视图或浅拷贝
不同的数组对象可以共享相同的数据。 视图方法创建一个包含相同数据的新数组对象
c = a.view()
c is a
注:通过view方法生成的c已经和a不是同一个了
c.base is a
注:c是基于a的
c.flags.owndata
注:c拥有数据?:并没有(因为c是拷贝了a的)
a.flags.owndata
注:a拥有数据
c.shape = 2,6
注:c的形状(3行4列)
c[0,4] = 1234
a
注:在c中修改会传到a中,因为数据实际保存在a中
切换数组返回其视图:
s = a[ : , 1:3]
s[:] = 10
a
注:s[:]是s的视图。注意s=10 和 s[:]=10的不同
深层复制
深层复制方法将完整复制数组及其数据
d = a.copy()
d is a
注:创建了新的数组和新的数据
d.base is a
注:d没有和a共享任何数据
d[0,0] = 9999
a
注:d内容修改不会影响a
函数和方法概述
这里列出了一些有用的NumPy函数和方法, 有关完整列表,请参阅例程:
https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines
今天更新内容比较少,昨晚没睡好,精神不佳,学校太热了。
未完待续~近期更新~谢谢观赏~希望对你学习有帮助~
关注公众号,“Python爱好者社区”,回复“爬虫”即可获取崔老师爬虫免费学习视频。
为大家提供与Python相关的最新技术和资讯。
长按指纹 > 识别图中二维码 > 添加关注