数组切片

import numpy as np
a = np.array([[11, 12, 13], [21, 22, 23]], [31, 32, 33])

注意Numpy中元素编号从0开始,左侧包含右侧不包含

  1. 取单个元素x = a[1, 2],对应第0维的第1个元素4
  2. 切片x = a[0:2, 1:3],对应第0维的第0~1个元素,第1维的第1~2个元素[[12 13], [22 23]]
  3. 切片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

各种拷贝

  1. 无拷贝a = b:a,b完全相同,指向同一对象
  2. 浅拷贝b = a.view():只会copy父对象,不会copy底层的数据,共用原始引用指向的对象数据。如果在view上修改数据,会直接反馈到原始对象。改变b的shape等父对象的参数时,不会改变a的相应参数
  3. 深拷贝b = a.copy():对象及其子对象都进行copy一份,两对象完全独立。