Python入门小技巧-1:range函数

前言:

一直在用Python,但在编程中一些小的知识点或者小技巧,总是查了忘,忘了查,没有进行好好地整理。今天就整理下自己在编程中遇到的小的小技巧,方便自己和大家查阅。


在定义一个数组范围时,比如,维度为10x1的数组,每次只想要取index=4,5,6的子数组,可以定义一个数组变量来方便操作。有这么几种写法:

  1. np.linspace(start, end, number),返回一个list的一维数组。
    >>>np.linspace(4, 6, 3)
    array([4., 5., 6.])

     

  2. np.arange(start, end, step),返回一个一个list的一维数组。
    >>>np.arange(4, 7, 1)
    array([4, 5, 6])
    
    注意end是7不是6。
  3. range(start, end, step) 

这里要注意的是方法3,因为在python2中range返回的是一个list的一维数组, 而在python3中range返回的就是一个迭代值。这个迭代值可以通过下列方法来改为list数组。

>>>range(4, 7, 1)
range(4, 7)

>>>list(range(4, 7, 1))
[4, 5, 6]

但是要注意的是,要想通过上述的方法来只能获取矩阵的一维切片。

举个例子:

>>>X = np.random.randint(0, 10, (5, 5))  # 生成5x5的随机矩阵,元素都在10以内
>>>X
array([[3, 9, 7, 0, 3],
       [1, 0, 6, 0, 4],
       [4, 6, 8, 6, 6],
       [7, 3, 5, 3, 6],
       [3, 4, 2, 3, 0]])

>>>a = range(0, 3, 1)  
>>>a
range(0, 3)

>>>b = np.linspace(0, 2, 3, dtype=int) 
>>>b
array([0, 1, 2])

>>>c = np.random.choice(5, 2)
>>>c
array([3, 4])

如果我想选取X矩阵中第1行的前三列,下面两种写法都是可以的。

>>>X[0, a]
array([3, 9, 7])

>>>X[0, b]
array([3, 9, 7])

但是我想取前三行前三列的子矩阵的话

>>>X[a, b]
array([3, 0, 8])

而不是

>>>X[0:3, 0:3]
array([[3, 9, 7],
       [1, 0, 6],
       [4, 6, 8]])

这里可以看出,第一种写法只取了a, b两个数组对应位组成的三对坐标[0, 0], [1, 1]和[2, 2]。

>>>X[a, c]
Traceback (most recent call last):
  File "<input>", line 1, in <module>
IndexError: shape mismatch: indexing arrays could not be broadcast together with shapes (3,) (2,) 

甚至上述的写法还会因为数组变量不一致而报错。因此想要获取某一个子矩阵,通过两个数组来获取就不行了。可以老老实实地用x:y写出切片,还可以用循环来做两次提取。

如果遇到好的方法在更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值