Python干货-Numpy索引与迭代

# 导入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迭代器则返回一个可迭代对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值