Python3NumPy——ndarray對象


 

Python3NumPy——ndarray對象

1.前沿

  • 推薦導入語法:import numpy as np
  • NumPy中使用ndarray對象表示數組,ndarray是NumPy庫的核心對象

2.創建ndarray對象

  • 函數array()傳遞Python序列創建數組
import numpy as np #導入Numpy庫,給出別名為np
x1 = np.array([1,2,3,4,5,6])
print('-'*20 + '第EX1個例子' + '-'*20)
print('EX1=>傳遞參數為單列表,創建的1維數組x1為: {}'.format(x1))
print('EX1=>x1的形狀為元組類型: {}'.format(x1.shape))
print('-'*20 + '第EX2個例子' + '-'*20)
x2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print('EX2=>傳遞參數為嵌套列表,創建的2維數組x2為: \n{}'.format(x2))
print('EX2=>x2的形狀為元組類型: {}'.format(x2.shape))
print('-'*20 + '第EX3個例子' + '-'*20)
x3 = np.array((7,8,9,10))
print('EX3=>傳遞參數為單元組,創建的1維數組x3為: {}'.format(x3))
print('EX3=>x3的形狀為元組類型: {}'.format(x3.shape))
print('-'*20 + 'End' + '-'*20)
--------------------第EX1個例子--------------------
EX1=>傳遞參數為單列表,創建的1維數組x1為: [1 2 3 4 5 6]
EX1=>x1的形狀為元組類型: (6,)
--------------------第EX2個例子--------------------
EX2=>傳遞參數為嵌套列表,創建的2維數組x2為:
[[1 2 3]
 [4 5 6]
 [7 8 9]]
EX2=>x2的形狀為元組類型: (3, 3)
--------------------第EX3個例子--------------------
EX3=>傳遞參數為單元組,創建的1維數組x3為: [ 7 8 9 10]
EX3=>x3的形狀為元組類型: (4,)
--------------------End--------------------

Note:補充知識=》修改數組形狀,修改后的形狀后,其元素在內存中的位置並未改變;只是改變了軸的長度。

X = np.array([[1,2,3,4],[5,6,7,8],[7,8,9,10]])#X傳遞參數為嵌套列表,創建的2維
print('原型狀數組X為(3行,4列): \n{}'.format(X))
print('X的形狀為元組類型(0軸長度為3,1軸為4): {}'.format(X.shape))
print('-'*20 + '第一次修改X的形狀' + '-'*20)
X.shape = 4, 3
print('第一次修改形狀后數組X為(4行,3列): \n{}'.format(X))
print('-'*20 + '第二次修改X的形狀' + '-'*20)
X.shape = 2, -1 # -1表示自動計算1軸的長度,結果為6
print('第二次修改形狀后數組X為(2行,6列): \n{}'.format(X))
print('='*50)
print('-'*20 + '指定形狀數組:reshape()方法' + '-'*20)
a = np.array([1,2,3,4,5,6,7,8,9])
print('原型狀數組a為(1行,9列): \n{}'.format(a))
a1 = a.reshape((3,3))
print('變換為3X3數組a1為(3行,3列): \n{}'.format(a1))
print('再次打印a數組為: \n{}'.format(a))
a[0] = 100
print('修改a的第一個元素的值為100后a為: \n{}'.format(a))
print('修改a的第一個元素的值為100后a1為: \n{}'.format(a1))
print('表明:a和a1共享存儲空間')
原型狀數組X為(3行,4列):
[[ 1 2 3 4]
 [ 5 6 7 8]
 [ 7 8 9 10]]
X的形狀為元組類型(0軸長度為3,1軸為4): (3, 4)
--------------------第一次修改X的形狀--------------------
第一次修改形狀后數組X為(4行,3列):
[[ 1 2 3]
 [ 4 5 6]
 [ 7 8 7]
 [ 8 9 10]]
--------------------第二次修改X的形狀--------------------
第二次修改形狀后數組X為(2行,6列):
[[ 1 2 3 4 5 6]
 [ 7 8 7 8 9 10]]
==================================================
--------------------指定形狀數組:reshape()方法--------------------
原型狀數組a為(1行,9列):
[1 2 3 4 5 6 7 8 9]
變換為3X3數組a1為(3行,3列):
[[1 2 3]
 [4 5 6]
 [7 8 9]]
再次打印a數組為:
[1 2 3 4 5 6 7 8 9]
修改a的第一個元素的值為100后a為:
[100 2 3 4 5 6 7 8 9]
修改a的第一個元素的值為100后a1為:
[[100 2 3]
 [ 4 5 6]
 [ 7 8 9]]
表明:a和a1共享存儲空間

3.元素類型

  • 采用dtype屬性獲取
  • 創建ndarray對象時,可以指定元素類型
  • 元素數據類型轉換方法:astype()
xi = np.array([1,2,3,4],dtype=np.int32) #指定整形
print('xi的類型為: {}'.format(xi.dtype))
print('-'*20 + 'End' + '-'*20)
xf = np.array([1,2,3,4],dtype=np.float) #指定浮點型
print('xf的類型為: {}'.format(xf.dtype))
print('-'*20 + 'End' + '-'*20)
xc = np.array([1,2,3,4],dtype=np.complex) #指定為復數型
print('xc的類型為: {}'.format(xc.dtype))
print('-'*20 + 'End' + '-'*20)
xi的類型為: int32
--------------------End--------------------
xf的類型為: float64
--------------------End--------------------
xc的類型為: complex128
--------------------End--------------------
print("numpy中去重的數據類型:")
set(np.typeDict.values())
numpy中去重的數據類型:

{numpy.uint16,
 numpy.complex64,
 numpy.complex128,
 numpy.timedelta64,
 numpy.int32,
 numpy.uint8,
 numpy.float64,
 numpy.void,
 numpy.int64,
 numpy.uint32,
 numpy.object_,
 numpy.int8,
 numpy.int32,
 numpy.uint64,
 numpy.int16,
 numpy.uint32,
 numpy.str_,
 numpy.datetime64,
 numpy.float32,
 numpy.bool_,
 numpy.float64,
 numpy.complex128,
 numpy.float16,
 numpy.bytes_}
print('xi.dtype的為: {}'.format(xi.dtype))
print('xi.dtype.type的為: {}'.format(xi.dtype.type))
xi.dtype的為: int32
xi.dtype.type的為: <class 'numpy.int32'>
print('-'*20 + '數據類型導致的溢出問題' + '-'*20)
xi16 = np.int16(200)
print('xi16 X xi16的結果溢出,計算出現錯誤: {}'.format(xi16*xi16))
--------------------數據類型導致的溢出問題--------------------
xi16 X xi16的結果溢出,計算出現錯誤: -25536

C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:3: RuntimeWarning: overflow encountered in short_scalars
  app.launch_new_instance()

NumPy的數值對象的運算速度比Python的內置類型的運算速度慢很多,如果程序中需要大量地單個數值運算,避免使用NumPy的數值對象。

print('-'*20 + '數據類型導致的時間問題' + '-'*20)
v1 = 3.14
v2 = np.float64(v1)
%timeit v1*v1
%timeit v2*v2
--------------------數據類型導致的時間問題--------------------
10000000 loops, best of 3: 46.6 ns per loop
The slowest run took 35.90 times longer than the fastest. This could mean that an intermediate result is being cached.
10000000 loops, best of 3: 129 ns per loop
t1 = np.array((1,2,3,4,5), dtype=np.float)
print('轉換數據類型為int32')
t11 = t1.astype(np.int32)
print(t11)
print('-'*40)
t2 = np.array((1,2,3,4), dtype=np.complex)
print('轉換數據類型為complex64')
t22 = t2.astype(np.complex64)
print(t22)
轉換數據類型為int32
[1 2 3 4 5]
----------------------------------------
轉換數據類型為complex64
[1.+0.j 2.+0.j 3.+0.j 4.+0.j]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM