多维数组的索引
import numpy as np
arr = np.array([[1, 2, 3, 4, 5],
[4, 5, 6, 7, 8],
[7, 8, 9, 10, 11]])
print(arr)
"""
[[ 1 2 3 4 5]
[ 4 5 6 7 8]
[ 7 8 9 10 11]]
"""
#返回索引第0行第[3,5]列的元素
print(arr[0, 3:5])
# [4 5]
#返回索引[1:]行第[2:]列的元素
print(arr[1:, 2:])
"""
[[ 6 7 8]
[ 9 10 11]]
"""
#返回索引行对应列的元素
print(arr[(0, 1, 2), (1, 2, 3)])
# [ 2 6 10]
#返回索引[1:]行第0,2,3列的元素
print(arr[1:, (0, 2, 3)])
"""
[[ 4 6 7]
[ 7 9 10]]
"""
mask = np.array([1,0,1],dtype=np.bool)
#返回第0,2行对应的第二列元素
print(arr[mask,2])
"""
[3 9]
"""
注意:只有行数有:时返回的是多行元素
变换数组的形态
arr = np.arange(12) # 创建一维数组[0,12)
print(arr)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]
# (1)改变数组的形状
# reshape()
print(arr.reshape(3,4))
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
# ravel 和 flatten区别(先答共同点后答不同点)
# 都能够实现将多维数组降为一维数组
# 区别在于返回的是拷贝(copy)还是返回的是视图(View)
# numpy.flatten()返回的是拷贝,对于拷贝所做的修改不会影响到原始数据。
# numpy.ravel()返回的是视图,会影响到原始数据
arr1 = np.arange(12).reshape(3, 4)
print(arr1)
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
arr2 = arr1.ravel()
arr2[0] = 100
print(arr2)
"""
[100 1 2 3 4 5 6 7 8 9 10 11]
"""
print(arr1)
"""
[[100 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
arr1 = np.arange(12).reshape(3, 4)
print(arr1)
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
arr2 = arr1.flatten()
arr2[0] = 100
print(arr2)
"""
[100 1 2 3 4 5 6 7 8 9 10 11]
"""
print(arr1)
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
纵向平展和横向平展
arr1 = np.arange(12).reshape(3, 4)
print(arr1)
"""
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
"""
arr2 = arr1.flatten('F')
print(arr2)
# [ 0 4 8 1 5 9 2 6 10 3 7 11]
arr3 = arr1.flatten()
print(arr3)
# [ 0 1 2 3 4 5 6 7 8 9 10 11]