数组切片
import numpy as np
a = np.array([[11, 12, 13], [21, 22, 23]], [31, 32, 33])
注意Numpy中元素编号从0开始,左侧包含右侧不包含
- 取单个元素
x = a[1, 2]
,对应第0维的第1个元素4
- 切片
x = a[0:2, 1:3]
,对应第0维的第0~1个元素,第1维的第1~2个元素[[12 13], [22 23]]
- 切片
x = a[:2, 2:]
,对应对应第0维的最开始到第2(2-1)个元素,第1维的第2个及以后的所有元素[[13], [23]]
判断一个数组是否存在于另一个大数组内
直接使用==
会逐数字判断元素是否存在:
import numpy as np
a = np.array([[1, 2, 3], [2, 3, 4]])
print(a == np.array([1, 2, 3]))
可以改为(a == np.array([1, 2, 3])).all(1).any()
。y == z会将y的每一行与z的每个元素进行比较。 使用all(axis=1)可以获取所有元素匹配的行,并使用any()找出是否匹配。
import numpy as np
a = np.array([[1, 2, 3], [2, 3, 4]])
print(a == np.array([1, 2, 3]))
print((a == np.array([1, 2, 3])).all(1))
print((a == np.array([1, 2, 3])).all(1).any())
输出结果:
[[ True True True]
[False False False]]
[ True False]
True
各种拷贝
- 无拷贝
a = b
:a,b完全相同,指向同一对象 - 浅拷贝
b = a.view()
:只会copy父对象,不会copy底层的数据,共用原始引用指向的对象数据。如果在view上修改数据,会直接反馈到原始对象。改变b的shape
等父对象的参数时,不会改变a的相应参数 - 深拷贝
b = a.copy()
:对象及其子对象都进行copy一份,两对象完全独立。