Numpy

Ndarray对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray
ndarray 对象是用于存放同类型元素的多维数组
ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或 dtype,描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。
    创建一个 ndarray 只需调用 NumPy 的 array 函数即可:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
image.png

插:
numpy array 类的reshape的用法
eg:

x = np.zeros((2,3,4))
x 是一个三维的零向量
x.reshape(2,3,2,2)
x 变成四维

x.reshape(-1)
返回x直接展开为1维的数组,但是x不变。和x.reshape(1,-1)等价
x 的总元素个数: 2*3*4 = 24个
那么x.reshape(n,-1) 返回x展开成(n, 24/n)的数组
同理:x.reshape(-1, n)返回x展开成(24/n, n)的数组
x.reshape(n1,n2,-1) 返回x展开成 (n1, n2, 24/(n1*n2))的数组

ndarray的一些常见属性:
  • ndarray.ndim:
    秩,即轴的数量或维度的数量

  • ndarray.shape:
    数组的维度,对于矩阵,n 行 m 列
    返回值是一个元组
    如:a = np.array([[1,2,3],[4,5,6]])
    a.shape -> (2,3)
    通过给shape赋值还可以改变ndarray的结构:


    image.png
  • ndarray.size:
    数组元素的总个数,相当于 .shape 中 n*m 的值

Numpy创建数组
  • numpy.empty
    numpy.empty 方法用来创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组:
    numpy.empty(shape, dtype = float, order = 'C')


    image.png

注意 : 数组元素为随机值,因为它们未初始化。

  • numpy.zeros
    创建指定大小的数组,数组元素以 0 来填充:
    numpy.zeros(shape, dtype = float, order = 'C')
    注: 默认为浮点数,可以自己设置数字类型,eg:
    y = np.zeros((5,), dtype = np.int)
  • numpy.ones
    用 1 来填充数组
Numpy从已有的数组创建数组:
  • numpy.asarray
    numpy.asarray(a, dtype = None, order = None)


    image.png

    可以把列表,元组等作为参数a传入asarray中转化为ndarray

  • numpy.frombuffer
    numpy.frombuffer 用于实现动态数组。
    numpy.frombuffer 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
  • numpy.fromiter
    numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。
NumPy 从数值范围创建数组
  • numpy.arange
numpy.arange(start, stop, step, dtype)
start : 起始值,默认为0
stop : 终止值(不包含)
step: 步长,默认为1
dtype:返回ndarray的数据类型,如果没有提供,则会使用输入数据的类型。
x = np.arange(5) 
x -> [0  1  2  3  4]
  • numpy.linspace
    numpy.linspace 函数用于创建一个一维数组,数组是一个等差数列构成的,格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
start : 序列的起始值
stop:序列的终止值,如果endpoint为true,该值包含于数列中
num : 要生成的等步长的样本数量,默认为50
endpoint : 该值为 true 时,数列中包含stop值,反之不包含,默认是True。
retstep : 如果为 True 时,生成的数组中会显示间距,反之不显示。 
dtype: ndarray 的数据类型

扩展:
b =np.linspace(1,10,10).reshape([10,1])
b ->
[[ 1.]
[ 2.]
[ 3.]
[ 4.]
[ 5.]
[ 6.]
[ 7.]
[ 8.]
[ 9.]
[10.]]

  • numpy.logspace
    numpy.logspace 函数用于创建一个于等比数列。格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
注:
start : 起始值为 base ^ start  eg:base = 10 start = 1,起始值为10,start = 2 ,起始值为100
stop:同理
剩余同理
NumPy 切片和索引
切片
  • slice 定义切片:
a = np.arange(10)
s = slice(2,7,2) # 从索引2开始切,到索引7截至,步长为2
print(a[s]) -> [2,4,6]
  • 冒号切片:
    和python 的list切片一致
  • 带有省略号的切片:
a = np.array([[1,2,3],[3,4,5],[4,5,6]]) 
a[...,1] # 第二列元素  -> [2 4 5]
a[1,...] # 第二行元素 -> [3,4,5]
a[...,1:] # 第二列及剩下的所有元素:
[[2 3]
 [4 5]
 [5 6]]
Numpy 广播:

例子:
设有两个数组 a 和 b,如果两个数组的形状相同,a.shape == b.shape , 那么
a*b 的结果就是a与b数组对应为相乘。这要求a和b维度相同而且各维度的长度相同。
当运算中的两个数组形状不相同时,numpy自动触发广播机制。

a = np.array([[ 0, 0, 0],
           [10,10,10],
           [20,20,20],
           [30,30,30]])
b = np.array([1,2,3])
print(a + b)
->
[[ 1  2  3]
 [11 12 13]
 [21 22 23]
 [31 32 33]]  

由此可见,numpy自动把 b 变化成了 [[1,2,3],[1,2,3],[1,2,3],[1,2,3]],以便和a做相加

  • np.tile(a,(m,n))
    就是将矩阵 a 横向复制为原来的m倍,纵向赋值为原来的n倍
数组修改操作
image.png

待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341