ndarray可迭代對象,函數,運算

本章主要講解可迭代對象ndarray,函數,數組

1. numpy迭代對象:nditer
import numpy as np
dt = np.arange(10).reshape((2,5))
print(dt)
for numbers in np.nditer(dt):
	print(numbers,end=' ')
複製代碼
2. 循環轉置以後的ndarray對象,記住轉置方法transpose或者T
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,參數:佈局

  • c_index 能夠跟蹤 C 順序的索引 和order='C'一致
  • f_index 能夠跟蹤 Fortran 順序的索引 和order='F'一致multi-index每次迭代能夠跟蹤一種索引類型
  • external_loop 給出的值是具備多個值的一維數組,而不是零維數組能夠理解爲不是ndarray對象中的元素
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

  1. 修改數組形狀 【必須顯示的給定形狀. eg:(4,5)】
  2. 翻轉數組
  3. 修改數組維度
  4. 鏈接數組
  5. 分割數組
  6. 數組元素的添加與刪除

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)
複製代碼
flat元素可迭代對象,注意是個對象
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 風格順序展開的數組對象

flatten意思是變平,展平

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'))
複製代碼
  • 翻轉數組
  • dt.transpose() 【開始的時候已經使用過】
  • dt.T 和上面的函數一致
  • rollaxis 向後翻轉指定軸
  • swapaxes 交換兩個軸
print('數組轉置')
print(dt)
print('數組轉置T')
print(dt.T)
print('數組轉置transpose')
print(dt.transpose())
複製代碼

2019-06-30,太多了,沒法一次整理完成 ...待續

數組的rollaxis,交換兩個軸

print(np.rollaxis(dt,0,1))
複製代碼
數組函數包括:
  1. 位運算
  2. 字符串函數
  3. 數學函數
  4. 算數函數
  5. 統計函數
  6. 排序,條件刷新函數
  7. 字節交換
相關文章
相關標籤/搜索