NumPy入门

Numpy是Python科学计算中最常用的工具,包括SciPy以及Pandas等工具也有对NumPy的依赖,因此Python科学计算应当从NumPy开始。

ndarray

ndarray是NumPy的核心数据类型,包括Pandas的DataFrame类型也与它有互转的方法。按其名称ndarray来看用的比较多的是矩阵运算。

创建

# coding:utf8
import numpy as np

a = np.array([1, 2, 3, 4])  # 使用list初始化
b = np.array((5, 6, 7, 8))  # 使用tuple初始化
c = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])  # 使用嵌套list初始化
print type(a)   # <type 'numpy.ndarray'>
print b.shape   # (4,)
print c.shape   # (2, 4)

print c
# [[1 2 3 4]
#  [5 6 7 8]]
c.shape = (4, 2)    # 更改shape属性 也可指定为(4, -1) or (-1, 2)
print c
print c.dtype   # int64
# ndarray在内存中连续存储,更改shape之后矩阵也随之更改
# [[1 2]
#  [3 4]
#  [5 6]
#  [7 8]]

d = a.reshape(2, 2)
# 此时a与d共享内存空间
print d

t = a.astype(np.float64)    # 转换类型
print t

# float64 的别名
print [key for key, value in np.typeDict.items() if value is np.float64]

自动生成数组

# coding:utf8
import numpy as np
# 数组的自动生成

# 0到1(不包括)以0.1为步长生成数组
a = np.arange(0, 1, 0.1)
print a
# [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
print type(a)
# <type 'numpy.ndarray'>

# 0到1(使用endpoint确定是否包括,默认True)取10个数
b = np.linspace(0, 1, 10, endpoint=False)
print b
# [ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]
c = np.linspace(0, 1, 10)
print c
# [ 0.          0.11111111  0.22222222  0.33333333  0.44444444  0.55555556
#  0.66666667  0.77777778  0.88888889  1.        ]

# 10**0 到 10**2 取等比3个
d = np.logspace(0, 2, 3, endpoint=True, base=10.0)
print d
# [   1.   10.  100.]
print d.dtype   # float64

e = np.zeros((2, 3), dtype='float')
print e
# [[ 0.  0.  0.]
#  [ 0.  0.  0.]]

f = np.ones((2, 3), dtype='int')
print f
# [[1 1 1]
#  [1 1 1]]

# 未初始化内存
g = np.empty((2, 4))
print g
# [[  6.90359047e-310   6.90359047e-310   1.58101007e-322   3.16202013e-322]
#  [  0.00000000e+000   1.17133162e-316   1.17133162e-316   1.17133162e-316]]

# 填充
h = np.full((2, 3), 6.0)
print h
# [[ 6.  6.  6.]
#  [ 6.  6.  6.]]

s = 'abcd'
i = np.fromstring(s, dtype=np.int8)
print i
# [ 97  98  99 100]

# 通过函数创建数组 这里输出乘法表
j = np.fromfunction(lambda x, y: (x + 1) * (y + 1), (9, 9), dtype=int)
print j

存取元素

# coding:utf8
import numpy as np

# 存取元素
a = np.arange(0, 10, 1)
print a
# [0 1 2 3 4 5 6 7 8 9]

# 切片
print a[3:5]
# [3, 4]    与list切片一致
print a[:5]
# [0 1 2 3 4] 省略0
print a[::-1]
# [9 8 7 6 5 4 3 2 1 0] 逆
print a[5:1:-2]
# [5 3]
a[2:4] = 100, 101
# 更改
print a
# [  0   1 100 101   4   5   6   7   8   9]

# 高级用法
b = a[[1, 3, 6, 8]]  # 取a的第1,2,6,8组成新的,不共享内存
c = a[np.array([[1, 3, 6, 8], [2, 5, 7, -3]])]
d = a[[1, 3, 6, 8, 2, 5, 7, -3]].reshape(2, 4)
print c == d    # 2*4 的 True
# 判断
print a[a < 7]  # [0 1 4 5 6]

e = np.arange(5, 0, -1)
# 长度一致,取True对应元素
print e[np.array([True, False, True, False, False])]
# [5, 3]

# randint(low, high, size, dtype)
f = np.random.randint(0, 10, 4)
print f

ufunc

# coding:utf8
import numpy as np

# ufunc
# 所谓的ufunc即对array每个数值进行操作的函数

a = np.linspace(0, 2*np.pi, 10)
print a
# 对a的每个值进行sin操作,输出也可指定为a
b = np.sin(a, out=a)
print a == b    # 1*10 True

c = np.arange(6.0).reshape((2, 3))
print c
print c.item(1, 2)  # 取c的1行2列(始于0行0列)

# 四则
d = np.arange(10)
e = np.arange(10, 0, -1)
f = np.arange(5)
print d + e
# print e + f     # err
print np.add(d, e)
# np.add(x1, x2, out=x1)
# np.subtract() np.multiply()
# np.divide() np.true_divide() np.floor_divide()
# np.negative() np.power() np.mod() np.remainder()
# np.equal() np.not_equal() np.less() np.greater()
# np.logical_and() or not xor

函数库(常用部分)

# coding: utf8
import numpy as np
# 函数库
# 随机数
print np.random.rand(3, 4)
print np.random.randn(3, 4)

# 统计
a = np.random.randint(0, 10, (3, 4))
print a
print a.sum()
print a.sum(keepdims=True)  # 保持维数
print a.var()
print a.mean()
print a.std()
print a.prod()
print np.average(a)
# 大小与排序
print a.max()
print a.min()
print a.argmin()    # 最小值下标
print a.sort()
print np.median(a)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容