numpy.nditer
1、可以分别对行列进行迭代,从而控制遍历顺序
例子:
import numpy as np
a=np.arange(12).reshape(3,4)
b=a.T
#迭代
print("原始数组为:")
print(a)
print(" \n")
print("转置后的数组为:")
print(b)
print(" \n")
print("对原始数组进行迭代,默认行迭代")
for x in np.nditer(a):
print(x,end=' ,')
print(' \n')
print("对转置后的数组进行迭代")
#区别:a与a.T的遍历顺序是一样的,但他们本身是不一样的
for x1 in np.nditer(b):
print(x1,end=' ,')
print(' \n')
print("从上面可以看出,对转置后的迭代和对原始数组进行迭代,输出都是一样的")
print("如果想要按列进行迭代,需要自己加order")
# print(' \n')
print("下面对原始数组按列进行迭代")
for x2 in np.nditer(a,order='F'):
print(x2,end=' ,')
print('\n')
print("对转置后的数组进行按列迭代")
for x3 in np.nditer(b,order='C'):
print(x3, end=' ,')
结果如下:
原始数组为:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
转置后的数组为:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
对原始数组进行迭代,默认行迭代
0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,
对转置后的数组进行迭代
0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,
从上面可以看出,对转置后的迭代和对原始数组进行迭代,输出都是一样的
如果想要按列进行迭代,需要自己加order
下面对原始数组按列进行迭代
0 ,4 ,8 ,1 ,5 ,9 ,2 ,6 ,10 ,3 ,7 ,11 ,
对转置后的数组进行按列迭代
0 ,4 ,8 ,1 ,5 ,9 ,2 ,6 ,10 ,3 ,7 ,11 ,
2、修改元素,由于python默认它是只读对象,所以对其修改时,需要指定read-write或者write-only
a = np.arange(0,24,2).reshape(3,4)
print ('原始数组是:')
print (a)
print ('\n')
for x in np.nditer(a, op_flags=['readwrite']):
x[...]=2*x
print ('修改后的数组是:')
print (a)
原始数组是:
[[ 0 2 4 6]
[ 8 10 12 14]
[16 18 20 22]]
修改后的数组是:
[[ 0 4 8 12]
[16 20 24 28]
[32 36 40 44]]