numpy学习笔记

1.shape=(2,)相当于shape=(1,2),不是(1,2) 如:np1=np.arange(1,10).reshape(3,3),统计函数np1.sum(0)和np1.sum(1)的shape相同,都是(3,)。注意:(3,)是一维,(1,3)是二维

2.可以将一个标量赋值给numpy对象的切片,该标量会自动广播,而对list无法进行此操作

import numpy as np
np1=np.arange(1,10).reshape(3,3)
np1
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
np1[1,:]=0 #取第二行 注意np1[:3]是取前三行
np1
array([[1, 2, 3],
       [0, 0, 0],
       [7, 8, 9]])

# 对list切片不能赋值
l=[1,2,3]
l[:2]=0
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: can only assign an iterable

3.将numpy数组的切片赋值给一个变量,对新变量的任何操作会改变原始数组的值,因为数组切片是原始数组的视图,并不会复制。这一点与列表list 不同,list切片是浅复制,父对象复制了,子对象没有

np1=np.arange(1,10).reshape(3,3)
np1
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
np2=np1[0] #np2是由np1切片而来
np2
array([1, 2, 3])
np2[0]=100 #修改np2的值
np2
array([100,   2,   3])
np1 #np1也发生了变化
array([[100,   2,   3],
       [  4,   5,   6],
       [  7,   8,   9]])

#深复制 np3=np1.copy() 改变np3的值不会影响np1
#list对象不同

l1=[1,2,3,[4,5]]
l2=l1[:] #切片复制
l2
[1, 2, 3, [4, 5]]
l2[0]=100
l2
[100, 2, 3, [4, 5]] #l2改变了
l1
[1, 2, 3, [4, 5]] #l1不变

l2[3][0]=200 #改变子对象
l2
[100, 2, 3, [200, 5]] 
l1
[1, 2, 3, [200, 5]] #l1也发生变化了,因为list切片复制只复制了父对象,
#子对象没有复制,改变赋值后变量的子对象,原变量也会发生变化

4.对numpy数组切片是,没有,就表示对0轴进行操作,无论是普通切片还是bool型切片 np1(2,)等价于np1(2,:) np1(bob='zzz')等价于np1(bob='zzz',:) 该bool型数组的长度必须和轴长度相同,此时是0轴

5.numpy的转置是原数组的视图而并不是复制

6.np.where()三元表达式的用法

7.np.sum(a,0)=a.sum(0)

8.布尔型数组的用法:[np1>0]返回一个布尔型数组 np1[np1>0]=2 把np1中大于0的数替换成2(np1发生改变),还有一个用法是统计数量,如(np1>0).sum()表示np1中大于0的数字个数

9.排序时,np.sort(np1,0)返回的是副本(复制了),np1.sort(0)会改变数组np1本身

10.(若np1.ndim>=2,则)len(np1)返回第一个维度的长度

11.唯一化(无重复项),np.unique(np1)返回np1中的唯一值,且已经排序,是一维的,shape=(n,)

x=np.arange(0,10,2)
x
array([0, 2, 4, 6, 8])
np2,np1=np.meshgrid(x,x)
np1
array([[0, 0, 0, 0, 0],
       [2, 2, 2, 2, 2],
       [4, 4, 4, 4, 4],
       [6, 6, 6, 6, 6],
       [8, 8, 8, 8, 8]])
np2
array([[0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8],
       [0, 2, 4, 6, 8]])
np.unique(np1)
array([0, 2, 4, 6, 8])
np.unique(np1).shape
(5,)

12.转化数据类型,np1.astype(np.int) 此时产生了副本 改变np1的数据类型应使用np1=np1.astype(np.int)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值