本章主要講解可迭代對象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))
複製代碼