numpy学习日志

为什么要用numpy,numpy和原生python的比较:

 numpy创建数组

np.array创建数组

  •  object是必选参数,可以是列表,元组,甚至可以是ndarray类型数组。例:numpy.array([1,2,3])或numpy.array(arr1)
  • dtype是可选参数,用于强制转换数组元素的类型,例:np.array([1,2,3.0,4.0,5.5],dtype = 'int')
  • copy用于复制一个数组,默认为True。True时复制的的数组与原数组id不同,False时复制的数组与原数组的id相同。也可以直接使用=,是试图操作,相当于列表的引用赋值操作。
  • subok,例:
    a = np.mat([1,2,3,4,5])#创建一个矩阵,矩阵类型
    #复制a的一个副本,又不想改变其数据类型
    b = np.array(a,subok = True)

    np.arange生成区间数组

  • 当参数为两个时,默认这两个参数时start和stop,而不是stop和step。

  • arange和range的不同之处。range(4.1)会报错,因为默认步长时整数,而开始结束值为浮点数。arange(4.1)不会报错,且返回值均为浮点型

  • 改变返回的ndarray的元素的数据类型

np.linspace()创建等差数列

np.logspace()生成等比数列

 

np.zeros()生成全零数组

  • 元素类型默认为float浮点数类型,默认是float64

  • 数组的形状不是一维时用元组表示,例:np.zeros((4,4),dtype='int')#4*4的数组

  • zeros_like()返回与给定数组相同形状的零数组,例:arr1 = np.zeros_like([[1,2,3],[1,2,3]])

np.ones()生成全一数组 

 同理,还有全一数组

numpy数组的属性

 ndarray.shape

  • 用来获取矩阵的形状,返回的是一个元组。
  • 可以使用ndarray.reshape((n,m))改变数组的形状。返回调整维度后的副本,而不改变原来的数组。
  • 若使用reshape()方法改变数组的形状,改变后的数组元素个数和原来数组的元素个数不同就会报错。此时可以使用ndarray.resize()来改变维度
  • 使用numpy.resize(a,newshape)函数改变数组的维度时,若新数组的元素比原数组的元素多,则元素组的元素会在多出的部分再写一轮,写满为止。这个和arr.resize(newshape,refcheck =False)方法的不同之处在于arr.resize()会用零补充。

ndarray.ndim

  • 返回数组的维度(秩):轴的数量,或者说时维度的数量,是一个标量

ndarray.size

  • 数组元素的个数,相当于shape中n*m的值

ndarray.dtype

astype()方法,返回数据类型改变后的数据,但原数组的数据类型不会发生改变。例:

import numpy as np

a = np.zeros((3,3))
b = a.astype('int')
print(a.dtype,b.dtype)

ndarray的切片和索引

一维数组的切片和索引

 另外,还有[:n],表示从第一个索引开始到第n个索引结束。不包括索引n

 二维数组的切片和索引

arr[start:stop:step]

 对于二维数组,arr[n]取的是arr第n行的一维数组,而一维数组arr[n]在加一个[m就是取得该一维数组的第m个元素,即]arr[n][m]取得是第n行m列的元素,等价于arr[n,m]。切片arr[a:b]会切出来arr的a行到b行的二维数组。可以进行二维切片,如:arr[a:b,x:y],可以切出来a行到b行,x列到y列的二维数组。

 整数数组的索引

 x[[0,1,2],[0,1,0]]索引的第一个列表[0,1,2]表示索引行的0,1,2行,后一个列表[0,1,0]是用来索引列0,1,0的。表示取数组x[0,0],x[1,1],x[2,0]元素。这样索引必须保证同时索引的行和列数量相同。

布尔数组的索引

例:找出数组中为奇数的元素,并将这些元素修改为-1

import numpy as np

arr1 = np.arange(30).reshape(5, 6)
print(arr1[arr1 % 2==1]) #输出结果[ 1  3  5  7  9 11 13 15 17 19 21 23 25 27 29]
arr1[arr1 % 2==1] = -1
print(arr1)

 也可以使用&和|来表示多个条件

 

 还可以使用True和False的形式来表示自己需要和不需要的数据

 例:

Row1 = np.array([True, False, False, True, True])  # 表示需要第1、4、5行
Column1 = np.array([True, False, False, True, True, False])  # 表示需要第1、4、5列
arr2 = arr1[Row1]
arr3 = arr1[:, Column1]
arr4 = arr1[Row1, Column1]
print(arr1, '\n\n', arr2, '\n\n', arr3, '\n\n', arr4)

 若两个一维数组的True数量不匹配,就会报错。这一点和整形索引一样

数组的索引和切片的值的更改会影响原数据!!!!! 

Numpy的广播机制

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值