第一个数组:
[[[0,1,2,3],
[4,5,6,7]],
[[8,9,10,11],
[12,13,14,15]]]
第二个数组:
[[[0,8],
[1,9],
[2,10],
[3,11]],
[[4,12],
[5,13],
[6,14],
[7,15]]]
这两个数组是一样的吗,怎么它的形状是什么样的,有不同吗?
参考GPT和自己的思路:这两个数组不完全相同,虽然它们的数值一样,但是它们的几何表达方式不同。第一个数组是一个二维数组,其中每个元素又包含一个长度为4的一维数组,可以理解为是一个2行4列的矩阵。而第二个数组是一个三维数组,其中每个元素又包含一个2行2列的二维数组,可以理解为是一个2行2列的矩阵,但这个矩阵有4层,即一个4页的矩阵。因此,它们的形状不同,第一个数组的形状是(2,2,4),第二个数组的形状是(2,4,2)。
第一个数组的形状是(2, 2, 4)
第二个数组的形状是(2, 4, 2)
布尔索引主要是利用的布尔数组,当数组的比较操作(比如==、>=)也是可以向量化,这些比较运算的结果是一个布尔数据类型的数组。该数组与原数组的长度和形状都是一致,我们可以获取到对应位置为True的值。
bool_arr = arr>3
arr[bool_arr] # array([4, 5, 6, 7, 8])
通过布尔索引获得的子数组为副本,修改后不影响原数组。
arr = np.array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
arr2 = arr[ arr>3]
arr2 = -1
arr
"""
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
"""