本章主要讲解可迭代对象ndarray,函数,数组
import numpy as np
dt = np.arange(10).reshape((2,5))
print(dt)
for numbers in np.nditer(dt):
print(numbers,end=' ')
复制代码
print(dt.T)
for numbers in np.nditer(dt.T):
print(numbers,end=' ')
复制代码
以上实例不是使用标准 C 或者 Fortran 顺序,选择的顺序是和数组内存布局一致的,这样作是为了提高访问的效率,默认是行序优先(row-major order,或者说是 C-order)bash
dt = np.arange(10).reshape((2,5))
print(dt)
# 强制使用C
print('显示设置使用C')
for members in np.nditer(dt,order='C'):
print(members,end=' ')
else:
print('')
# '强制使用F'
print('显示设置使用F')
for members in np.nditer(dt,order='F'):
print(members,end=' ')
else:
print('')
复制代码
上面的全部都是,显示设置顺序,使用给定顺序,循环数据函数
dt = np.arange(10).reshape((5,2))
print(dt)
print('copy对象使用F')
for members in np.nditer(dt.copy(order='F')):
print(members,end=' ')
else:
print('')
print('转置以后copy对象使用F')
for members in np.nditer(dt.T.copy(order='F')):
print(members,end=' ')
else:
print('')
复制代码
注意上面的循环都ndarray中的对象都是只读的,不能修改循环内容 eg: 打印迭代对象oop
Traceback (most recent call last):
File "numpy.function.py", line 64, in <module>
members[...] = members*2
ValueError: assignment destination is read-only
使用参数:op_flags=readwrite或者readonly
readwrite: 可修改
readonly: 只读的
复制代码
此外还能够指定nditer类拥有的构造器参数flags,参数:布局
dt = np.linspace(10,58,24,dtype='int').reshape((4,6))
print(dt)
print('打印迭代对象')
for members in np.nditer(dt,op_flags=['readwrite']):
# print(members[...])
members[...] = members*2
print(members,end=' ')
else:
print('')
print(dt)
dt = np.logspace(1,10,20,dtype='int').reshape((5,4))
print(dt)
# 遍历全部对象,合并成一个对象
for members in np.nditer(dt,flags=['external_loop'],order='F'):
print(members,end=', ')
else:
print('')
复制代码
若是两个对象是能够广播的,则能够迭代两个对象ui
dt1 = np.array([[2,3,4],[4,5,6],[6,53,2]])
dt2 = np.arange(3,12).reshape((3,3))
print('两个可迭代对象的元素是:')
for x,y in np.nditer([dt1,dt2]):
print('{}:{}'.format(x,y),end=' ')
print('')
复制代码
下面全是numpy的一些函数,包括如下几大类:spa
np.reshape第三个参数 order='C','F','A' order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。code
print('函数相关!')
# reshape
dt = np.asarray([[1,2,3,4],[4,5,6,7],[5,6,7,8]])
print(dt)
dt = np.reshape(dt,(2,6))
print(dt)
dt = dt.reshape((6,2))
print(dt)
复制代码
print('原始数组')
for i in dt:
print(i)
print('flat元素可迭代后的数组')
for members in dt.flat:
print(members)
复制代码
flatten,返回一组拷贝,而且对拷贝所作的修改不会影响原始数组,相似于deepcopy,格式以下:ndarray.flatten(order='C') order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺orm
print('flatten元素可迭代后的数组')
for members in dt.flatten(order='C'):
print(members)
复制代码
不一样风格的展开数组,以 C 风格展开数组和以 F 风格顺序展开的数组对象
print('使用flatten展平对象')
print(dt.flatten())
print(dt.flatten(order='F'))
# print(dt.flat())
复制代码
np.ravel展平对象,这个是数组视图(view,有点相似 C/C++引用reference的意味),修改会影响原始数组。order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'K' -- 元素在内存中的出现顺序。该函数接收两个参数:数组和顺序,ravel(dt,order='C')
print('使用ravel展平对象')
print(dt.ravel())
print(dt.ravel(order='F'))
复制代码
print('数组转置')
print(dt)
print('数组转置T')
print(dt.T)
print('数组转置transpose')
print(dt.transpose())
复制代码
2019-06-30,太多了,没法一次整理完成 ...待续
数组的rollaxis,交换两个轴
print(np.rollaxis(dt,0,1))
复制代码