# 导入numpy
import numpy as np
一维数组与二维数组中的索引
# 定义一个由3到14数列数组的array
a = np.arange(3, 15)
# 打印这个array
print(a)
# 访问索引为2位置的元素
print(a[2])
[ 3 4 5 6 7 8 9 10 11 12 13 14]
5
# 定义一个3行4例,由3到14组成的二维数组array(也可以叫矩阵格式)
a = np.arange(3, 15).reshape((3, 4))
# 打印二维数组
print(a)
# 查看索引为2位置的元素
print(a[2])
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
[11 12 13 14]
从上例可以看出,如果是二维的数组,这里的索引[2]得到的是索引为2的行中的所有数据
如果想从二维数组中找出某个单独元素,就要指定行与列的索引
# 打印出第3行第2列的数据
print(a[2][1])
# 另一种写法
print(a[2, 1])
12
12
对数组进行切片
print('打印原始数组\n', a)
print('取第3行,所有列的元素\n', a[2, :])
print('取所有行,第4列的元素\n', a[:,3])
print('取第2行中第2列到第3列的元素\n', a[1, 1:3])
打印原始数组
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
取第3行,所有列的元素
[11 12 13 14]
取所有行,第4列的元素
[ 6 10 14]
取第2行中第2列到第3列的元素
[8 9]
循环
for row in a:
print('打印行', row)
打印行 [3 4 5 6]
打印行 [ 7 8 9 10]
打印行 [11 12 13 14]
如果对一个二维的数组进行循环,在每次迭代中,默认得到的数据中行数据
那如何对二维数组中的列进行迭代呢?遗憾的是numpy中并没有直接提供这种方法
不过,可以利用numpy提供的行列转换方法,将二维数组的列转成行,再进行迭代,即可输出列数据
print('打印原始数据\n', a)
print('打印转置后的数据\n', a.T)
print('对列进行迭代')
for column in a.T:
print('\t打印列数据:', column)
打印原始数据
[[ 3 4 5 6]
[ 7 8 9 10]
[11 12 13 14]]
打印转置后的数据
[[ 3 7 11]
[ 4 8 12]
[ 5 9 13]
[ 6 10 14]]
对列进行迭代
打印列数据: [ 3 7 11]
打印列数据: [ 4 8 12]
打印列数据: [ 5 9 13]
打印列数据: [ 6 10 14]
如果想把二维数组中的每一个元素都输出,则可以将二维数组展开,拉伸成一维数组,再进行迭代
# 使用迭代器flat迭代每个元素
print('使用迭代器flat:', a.flat)
for item in a.flat:
print('\t打印元素', item)
# 将二维的array 压扁,形成一维array
print('使用flatten扁化成一维形状:', a.flatten())
a = a.flatten()
for item in a:
print('\t打印元素', item)
使用迭代器flat: <numpy.flatiter object at 0x000001C725C23370>
打印元素 3
打印元素 4
打印元素 5
打印元素 6
打印元素 7
打印元素 8
打印元素 9
打印元素 10
打印元素 11
打印元素 12
打印元素 13
打印元素 14
使用flatten扁化成一维形状: [ 3 4 5 6 7 8 9 10 11 12 13 14]
打印元素 3
打印元素 4
打印元素 5
打印元素 6
打印元素 7
打印元素 8
打印元素 9
打印元素 10
打印元素 11
打印元素 12
打印元素 13
打印元素 14
flatten
函数会将二维数组扁平化,即压成一维形状
flat
迭代器则返回一个可迭代对象