Python - NumPy一维数组的切片

NumPy中对于一维数组的切片处理,跟list的操作感觉差不多:

In [1]: import numpy as np

In [2]: arr1 = np.arange(10)

In [3]: arr1
Out[3]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

In [4]: arr2 = arr1[:3]

In [5]: arr2
Out[5]: array([0, 1, 2])

但是,接下来就不同了,在list里,我们知道切片操作就相当于创建了一个副本,最这个副本的操作是不会影响原来的列表的,但是NumPy中显然不是:

In [6]: arr2[0] = 100

In [7]: arr2
Out[7]: array([100,   1,   2])

In [8]: arr1
Out[8]: array([100,   1,   2,   3,   4,   5,   6,   7,   8,   9])

从这里可以看到,对arr2中进行重新赋值,结果原来的arr1也改变了,原因在于在NumPy中,将一个标量值赋给一个切片时,会自动传播到整个选区,也就是“广播”的概念,也就是对切片的所有操作,都会直接显示在最初的数组上
NumPy这么设置是因为NumPy处理的对象是大数据,对于经常的复制操作来说,大量的数据显然会大大降低性能,
当然,如果想要像之前一样获得一个副本,可以显式地复制:

In [9]: arr3 = arr1[2:4].copy()

In [10]: arr3
Out[10]: array([2, 3])

In [11]: arr3[0] = 11111

In [12]: arr3
Out[12]: array([11111,     3])

In [13]: arr1
Out[13]: array([100,   1,   2,   3,   4,   5,   6,   7,   8,   9])

以上~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值