(番外篇2) python编程笔记

python编程笔记

整体注意点

  1. 一切皆对象,对象的概念贯穿整个python设计中。
  2. 可变对象与不可变对象。可变对象指的是在数据类型的内存地址上可以直接修改,不可变则不能修改。不可变对象最典型的有元组、整数等,而可变对象最典型的有列表。
  3. 可迭代对象。
  4. 变量名。变量名指向一个内存地址(指向一个对象),函数内可以使用全局变量,若指向的是可变对象,则可以在原内存地址中修改,但是永远无法改变该变量指向其他地址。如果需要修改该变量指向的地址,需要声明:“global 变量名”。
  5. 变量的引用,引用的内存空间是哪里取决于右端值返回的是副本还是原地址空间。值得注意。
  6. 函数传参,传的永远是内存地址。这一点非常重要。

列表

numpy库

numpy库提供了多维数组的数据类型,这在处理数据时极其方便。

数组arr的索引。某种角度而言,arr的索引有两种,一种是返回arr内存地址空间的映像,这在数据量很大时是非常快的;一种是返回副本,即是复制过的,它的内存地址是不一致的。

  1. 返回原内存地址映像: a r r [ x 0 , x 1 , . . . , x n − 1 ] arr[x_0,x_1,...,x_{n-1}] arr[x0,x1,...,xn1]。这里面每一个 x i x_i xi表示的是一个切片"a:b"(左闭右开[a,b))。
    可以将上述情况分成三种情况:
  • a r r [ a , x 2 , . . . , x n − 1 ] arr[a,x_2,...,x_{n-1}] arr[a,x2,...,xn1]:此时,a相当于切片[a:a+1],与他不同的是用a的时候arr将降低一个维度,而用切片[a:a+1]并不会降低维度。因此需要特别留意此处!
  • a r r [ a : b , x 2 , . . . , x n − 1 ] arr[a:b,x_2,...,x_{n-1}] arr[a:b,x2,...,xn1]:这是最常规的操作,切取该维度的 [ a , b − 1 ] [a,b-1] [a,b1]
  • a r r [ a : b ] arr[a:b] arr[a:b]:后续没有指明的维度,默认为全选:。
  1. 返回数组的副本: a r r [ x 0 , x 1 , . . . , x n − 1 ] arr[x_0,x_1,...,x_{n-1}] arr[x0,x1,...,xn1]。这里面每一个 x x x表示的是一个整数列表"[a,b,c]",他返回对应排列的的数组副本。
    可以将上述情况分成三种情况:
  • a r r [ x 0 , x 1 , . . . , x n − 1 ] arr[x_0,x_1,...,x_{n-1}] arr[x0,x1,...,xn1],返回对应索引的值副本,他是一个行向量,可以利用它来有效赋值!

  • a r r [ x 0 ] arr[x_0] arr[x0] ,只有一个 x 0 x_0 x0,即 a r r [ x 0 ] arr[x_0] arr[x0],未指明的默认该维度全选(相当于现实的":" ),因此返回数组对应维度对应排列的副本,这就是所谓的花式索引,在选取一些特定行(特定样本)时非常方便。

  • a r r [ x ] arr[x] arr[x],此时x为一个布尔型的对应数组,他返回对应值,可以利用他进行有效的赋值。

数组的类型:

  1. dtype。通过arr.dtype可以查看当前数组的类型。数组是单一类型的,如果对一个整数数组的某个空间赋值为浮点数,则只截取整数部分。利用arr.dtype = np.float64 可以解释为64位浮点数,此时信息并没有变化,只是它的解释方式变了。
  2. 如果想要就爱哪个某个数组转化为另一中数据类型,此时可能造成信息的损失,可以用as.type。如arr2 = arr1.astype(np.int32)。

注:数组的不同数据类型可能会导致运算规则的变化,这是可能带来很大的迷惑。特别是在赋值运算时会引起类型的变化,需要特别注意,例如图像处理时,图片数组的类型是uint8,此时如果不注意进行赋值,就会因为截断而产生很多不容易发现的错误。

# e.g. 1
>>> o
array([1, 1, 1, 1], dtype=uint8)
>>> k
array([248, 248, 248,   1], dtype=uint8)
>>> o-k
array([9, 9, 9, 0], dtype=uint8)

# e.g. 2
>>> k
array([248, 248, 248,   1], dtype=uint8)
>>> k*k
array([64, 64, 64,  1], dtype=uint8)

数组的一些有用的函数:(矢量化计算,速度块,基于np库)
4. dot 、 T 、inv 、 np.sqrt 、 np.exp、 np.log
5. np.sum(arr, axis)、 np.max(arr, axis)、 np.argmax(arr, axis),这些函数可以对数组进行快捷操作,其中axis默认为none,表示的将其压平为行向量操作,如果指明维度为m,则沿着该维度进行操作。返回的均是一个行向量(一维)。因此需要注意其维度变化。可以利用reshape进行重塑。
6. reshape(arr,newshape),利用此函数可以有效的塑造所要的数组维度。e.g. reshape(np.arange(6),(2,3))
7. 格式化输出 "{0:*[<^>]n} … ".format{“str0”,“str1”,“str2”}
8. np.argwhere(condition)、np.where
9. 对bool值矩阵,利用arr.any()和arr.all()来做逻辑判断
10. 对数据进行加行和加列。np.hstack ,其中h表示horizontally。

  >>> a = np.array((1,2,3))
  >>> b = np.array((2,3,4))
  >>> np.hstack((a,b))
  array([1, 2, 3, 2, 3, 4])
  >>> a = np.array([[1],[2],[3]])
  >>> b = np.array([[2],[3],[4]])
  >>> np.hstack((a,b))
  array([[1, 2],
         [2, 3],
         [3, 4]])

DataFrame

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值