這個(gè)是對于Python做科學(xué)計(jì)算,一張相對完整的思維導(dǎo)圖
在以前的科學(xué)計(jì)算是沒有conda的地位的,都是這個(gè)python(x,y)的項(xiàng)目
你可以嘗試的使用,我這里就是一個(gè)推薦
https://python-xy.github.io/
https://python-xy.github.io/downloads.html
https://cn.bing.com/?FORM=Z9FD1
這里我安利一下,微軟的搜索
我們主要用ipython來學(xué)習(xí),之后用Ide來工作
我們想在開機(jī)運(yùn)行的時(shí)候就運(yùn)行一段代碼
import numpy as np
import scipy as sp
import pylab as pl
from numpy import *
我們這里用-i的選項(xiàng),引入環(huán)境
$ ipython [options] files如果在沒有選項(xiàng)的情況下調(diào)用,它將執(zhí)行按順序列出的所有文件,并將您放到解釋器中,同時(shí)仍然確認(rèn)您在
ipythonrc
檔案。這種行為與標(biāo)準(zhǔn)Python不同,標(biāo)準(zhǔn)Python被稱為python -i
將只執(zhí)行一個(gè)文件并忽略配置設(shè)置。
$ ipython -i myfile.py
我這里沒有什么在打開的一瞬間就引入庫的好辦法,這里先手動
會報(bào)錯(cuò),你的版本可能不會
將這庫降級
pip install --upgrade 'jedi<0.18.0'
然后試試有沒有成功
也可以直接的使用一些cmd命令
我們這里IDE使用Spyder是python(x,y)的項(xiàng)目的進(jìn)化版
spyder是Python(x,y)的作者為它開發(fā)的一個(gè)簡單的Python開發(fā)環(huán)境。和其它Python IDE相比它最大 的優(yōu)點(diǎn)就是模仿MATLAB的workspace功能,可以很方便地觀察和修改數(shù)組的值。通過給array函數(shù)傳遞Python的序列對象創(chuàng)建數(shù)組,如果傳遞的是多層嵌套的序列,將創(chuàng)建多 維數(shù)組
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
我們這里先創(chuàng)建一些數(shù)組
打印的結(jié)果
可以有一些方法,查詢變量類型+數(shù)據(jù)結(jié)構(gòu)大小
數(shù)組a的shape只有一個(gè)元素,因此它是一維數(shù)組。
而數(shù)組c的shape有兩個(gè)元素,因此它是二維數(shù)組, 其中第0軸的長度為3,第1軸的長度為4。
還可以通過修改數(shù)組的shape屬性,在保持?jǐn)?shù)組元素個(gè)數(shù)不 變的情況下,改變數(shù)組每個(gè)軸的長度。
下面的例子將數(shù)組c的shape改為(4,3),注意從(3,4)改為(4,3)并 不是對數(shù)組進(jìn)行轉(zhuǎn)置,而只是改變每個(gè)軸的大小,數(shù)組元素在內(nèi)存中的位置并沒有改變:
各個(gè)大小的數(shù)組大小
原有的大小
變換后的大小
當(dāng)某個(gè)軸的元素為-1時(shí),將根據(jù)數(shù)組元素的個(gè)數(shù)自動計(jì)算此軸的長度,因此下面的程序?qū)?shù)組c的 shape改為了(2,6):
輸出的結(jié)果
使用數(shù)組的reshape方法,可以創(chuàng)建一個(gè)改變了尺寸的新數(shù)組,原數(shù)組的shape保持不變:
輸出的結(jié)果
可以看到a,b的數(shù)據(jù)是共享一快內(nèi)存的
你會問為什么?
你看就是這樣,我對a[1]元素做了更改
數(shù)組的元素類型可以通過dtype屬性獲得。
上面例子中的參數(shù)序列的元素都是整數(shù),因此所創(chuàng)建的數(shù)組 的元素類型也是整數(shù),并且是32bit的長整型。
可以通過dtype參數(shù)在創(chuàng)建時(shí)指定元素類型:
紅字部分就是元素類型的參數(shù)
上面的例子都是先創(chuàng)建一個(gè)Python序列,然后通過array函數(shù)將其轉(zhuǎn)換為數(shù)組,這樣做顯然效率不高。
可以直接使用現(xiàn)成的函數(shù)來進(jìn)行數(shù)據(jù)列的生成
arange函數(shù)類似于python的range函數(shù),通過指定開始值、終值和步長來創(chuàng)建一維數(shù)組,注意 數(shù)組不包括終值
linspace函數(shù)通過指定開始值、終值和元素個(gè)數(shù)來創(chuàng)建一維數(shù)組,可以通過endpoint關(guān)鍵字指定
是否包括終值,缺省設(shè)置是包括終值
logspace函數(shù)和linspace類似,不過它創(chuàng)建等比數(shù)列,上面的例子產(chǎn)生1(10^0)到100(10^2)、 有20個(gè)元素的等比數(shù)列
使用frombuffer, fromstring, fromfile等函數(shù)可以從字節(jié)序列創(chuàng)建數(shù)組
Python的字符串實(shí)際上是字節(jié)序列,每個(gè)字符占一個(gè)字節(jié),因此如果從字符串s創(chuàng)建一個(gè)8bit的整數(shù)數(shù) 組的話,所得到的數(shù)組正好就是字符串中每個(gè)字符的ASCII編碼
如果從字符串s創(chuàng)建16bit的整數(shù)數(shù)組,那么兩個(gè)相鄰的字節(jié)就表示一個(gè)整數(shù),把字節(jié)98和字節(jié)97當(dāng)作 一個(gè)16位的整數(shù),它的值就是98*256+97 = 25185。
可以看出內(nèi)存中是以little endian(低位字節(jié)在 前)方式保存數(shù)據(jù)的。
如果把整個(gè)字符串轉(zhuǎn)換為一個(gè)64位的雙精度浮點(diǎn)數(shù)數(shù)組,那么它的值是以上
顯然這個(gè)例子沒有什么意義,但是可以想象如果我們用C語言的二進(jìn)制方式寫了一組double類型的數(shù) 值到某個(gè)文件中,那們可以從此文件讀取相應(yīng)的數(shù)據(jù),并通過fromstring函數(shù)將其轉(zhuǎn)換為float64類型 的數(shù)組。
與C語言的集成是另外一個(gè)有趣的故事
以上函數(shù)將數(shù)組下標(biāo)轉(zhuǎn)換為數(shù)組中對應(yīng)的值,然后使用fromfunction函數(shù)創(chuàng)建數(shù)組.
fromfunction函數(shù)的第一個(gè)參數(shù)為計(jì)算每個(gè)數(shù)組元素的函數(shù),第二個(gè)參數(shù)為數(shù)組的大小(shape),因?yàn)?它支持多維數(shù)組,所以第二個(gè)參數(shù)必須是一個(gè)序列,本例中用(10,)創(chuàng)建一個(gè)10元素的一維數(shù)組。
這不,就是一個(gè)9x9的乘法表
在其上面就像matlab一樣的變量表
可以直接的編輯這些元素
可以直接繪圖
這樣就可以直接的繪圖出來
[1,2,3,4]
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array((5, 6, 7, 8))
c = np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]])
%varexp --plot b
%varexp --hist a
a
b
c
c.dtype
a.shape
b.shape
c.shape
c.shape = 4,3
c
c.shape = 2,-1
c
d = a.reshape((2,2))
d
a
a[1]=7
a
d
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.float)
np.array([[1, 2, 3, 4],[4, 5, 6, 7], [7, 8, 9, 10]], dtype=np.complex)
np.arange(0,1,0.1)
np.linspace(0, 1, 12)
np.logspace(0, 2, 20)
s = "abcdefgh"
np.fromstring(s, dtype=np.int8)
np.fromstring(s, dtype=np.int16)
np.fromstring(s, dtype=np.float)
def func(i):
return i%4+1
np.fromfunction(func, (10,))
def func2(i, j):
return (i+1) * ( j+1)
a = np.fromfunction(func2, (9,9))
a
%varexp --plot c
%varexp --plot b
以上的代碼是以上我寫的所有代碼,有需要復(fù)制使用的朋友可以直接使用
聯(lián)系客服