国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python如何實現大型數組運算(使用NumPy)

Python如何實現大型數組運算(使用NumPy)

2020-07-24 18:20看云 Python

這篇文章主要介紹了Python如何實現大型數組運算,文中講解非常細致,幫助大家更好的了解和學習,感興趣的朋友可以了解下

問題

你需要在大數據集(比如數組或網格)上面執行計算。

解決方案

涉及到數組的重量級運算操作,可以使用NumPy庫。NumPy的一個主要特征是它會給Python提供一個數組對象,相比標準的Python列表而已更適合用來做數學運算。下面是一個簡單的小例子,向你展示標準列表對象和NumPy數組對象之間的差別:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
>>> # Python lists
>>> x = [1, 2, 3, 4]
>>> y = [5, 6, 7, 8]
>>> x * 2
[1, 2, 3, 4, 1, 2, 3, 4]
>>> x + 10
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "int") to list
>>> x + y
[1, 2, 3, 4, 5, 6, 7, 8]
 
>>> # Numpy arrays
>>> import numpy as np
>>> ax = np.array([1, 2, 3, 4])
>>> ay = np.array([5, 6, 7, 8])
>>> ax * 2
array([2, 4, 6, 8])
>>> ax + 10
array([11, 12, 13, 14])
>>> ax + ay
array([ 6, 8, 10, 12])
>>> ax * ay
array([ 5, 12, 21, 32])
>>>

正如所見,兩種方案中數組的基本數學運算結果并不相同。特別的,numpy中的標量運算(比如 ax * 2 或 ax + 10 )會作用在每一個元素上。另外,當兩個操作數都是數組的時候執行元素對等位置計算,并最終生成一個新的數組。

對整個數組中所有元素同時執行數學運算可以使得作用在整個數組上的函數運算簡單而又快速。比如,如果你想計算多項式的值,可以這樣做:

?
1
2
3
4
5
6
>>> def f(x):
... return 3*x**2 - 2*x + 7
...
>>> f(ax)
array([ 8, 15, 28, 47])
>>>

NumPy還為數組操作提供了大量的通用函數,這些函數可以作為math模塊中類似函數的替代。比如:

?
1
2
3
4
5
>>> np.sqrt(ax)
array([ 1. , 1.41421356, 1.73205081, 2. ])
>>> np.cos(ax)
array([ 0.54030231, -0.41614684, -0.9899925 , -0.65364362])
>>>

使用這些通用函數要比循環數組并使用math模塊中的函數執行計算要快的多。因此,只要有可能的話盡量選擇numpy的數組方案。

底層實現中,NumPy數組使用了C或者Fortran語言的機制分配內存。也就是說,它們是一個非常大的連續的并由同類型數據組成的內存區域。所以,你可以構造一個比普通Python列表大的多的數組。比如,如果你想構造一個10,000*10,000的浮點數二維網格,很輕松:

?
1
2
3
4
5
6
7
8
9
10
>>> grid = np.zeros(shape=(10000,10000), dtype=float)
>>> grid
  array([[ 0., 0., 0., ..., 0., 0., 0.],
  [ 0., 0., 0., ..., 0., 0., 0.],
  [ 0., 0., 0., ..., 0., 0., 0.],
  ...,
  [ 0., 0., 0., ..., 0., 0., 0.],
  [ 0., 0., 0., ..., 0., 0., 0.],
  [ 0., 0., 0., ..., 0., 0., 0.]])
>>>

所有的普通操作還是會同時作用在所有元素上:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> grid += 10
>>> grid
array([[ 10., 10., 10., ..., 10., 10., 10.],
  [ 10., 10., 10., ..., 10., 10., 10.],
  [ 10., 10., 10., ..., 10., 10., 10.],
  ...,
  [ 10., 10., 10., ..., 10., 10., 10.],
  [ 10., 10., 10., ..., 10., 10., 10.],
  [ 10., 10., 10., ..., 10., 10., 10.]])
>>> np.sin(grid)
array([[-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111],
  [-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111],
  [-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111],
  ...,
  [-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111],
  [-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111],
  [-0.54402111, -0.54402111, -0.54402111, ..., -0.54402111,
    -0.54402111, -0.54402111]])
>>>

關于NumPy有一點需要特別的主意,那就是它擴展Python列表的索引功能 - 特別是對于多維數組。為了說明清楚,先構造一個簡單的二維數組并試著做些試驗:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
>>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
 
>>> # Select row 1
>>> a[1]
array([5, 6, 7, 8])
 
>>> # Select column 1
>>> a[:,1]
array([ 2, 6, 10])
 
>>> # Select a subregion and change it
>>> a[1:3, 1:3]
array([[ 6, 7],
    [10, 11]])
>>> a[1:3, 1:3] += 10
>>> a
array([[ 1, 2, 3, 4],
    [ 5, 16, 17, 8],
    [ 9, 20, 21, 12]])
 
>>> # Broadcast a row vector across an operation on all rows
>>> a + [100, 101, 102, 103]
array([[101, 103, 105, 107],
    [105, 117, 119, 111],
    [109, 121, 123, 115]])
>>> a
array([[ 1, 2, 3, 4],
    [ 5, 16, 17, 8],
    [ 9, 20, 21, 12]])
 
>>> # Conditional assignment on an array
>>> np.where(a < 10, a, 10)
array([[ 1, 2, 3, 4],
    [ 5, 10, 10, 8],
    [ 9, 10, 10, 10]])
>>>

討論

NumPy是Python領域中很多科學與工程庫的基礎,同時也是被廣泛使用的最大最復雜的模塊。即便如此,在剛開始的時候通過一些簡單的例子和玩具程序也能幫我們完成一些有趣的事情。

通常我們導入NumPy模塊的時候會使用語句 import numpy as np 。這樣的話你就不用再你的程序里面一遍遍的敲入numpy,只需要輸入np就行了,節省了不少時間。

如果想獲取更多的信息,你當然得去NumPy官網逛逛了,網址是: http://www.numpy.org

以上就是Python如何實現大型數組運算(使用NumPy)的詳細內容,更多關于Python 大型數組運算(使用NumPy)的資料請關注服務器之家其它相關文章!

原文鏈接:https://www.kancloud.cn/kancloud/python3-cookbook/47184

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看a级毛片在线播放 成人片免费看 | 一二三四区视频在线观看 | 精品免费在线 | 久久久国产精品一区 | 欧美亚洲免费 | 国产99久久精品 | 日本一区二区在线视频 | 色网在线看 | 亚洲日韩欧美一区二区在线 | 日韩国产 | 国产一区二区三区在线观看免费 | 免费一级毛片在线播放放视频 | 欧美影院日韩 | 色网综合| 精品一二区| 丝瓜视频在线观看 | 日韩精品专区 | 国产欧美视频一区二区三区 | 青青草原综合久久大伊人精品 | 成人精品国产一区二区4080 | a久久| 中文字幕亚洲综合久久久软件 | 国产小视频自拍 | 亚洲精品一区二区三区蜜桃下载 | 国产一区二区在线视频 | 精品国产免费久久久久久尖叫 | 日韩免费视频 | 91久久精品日日躁夜夜躁国产 | 午夜婷婷丁香 | 国产精品福利视频 | 国产精品久久久久无码av | 日韩免费精品 | 久久久国产精品一区 | 激情婷婷| 91精品久久久久久久久久 | 黄色片在线观看视频 | 97热在线观看 | 亚洲人成网站999久久久综合 | 国产精品一区视频 | 四虎免费看黄 | 久久成人精品视频 |