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])
以上~
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116776.html