Numpy简单使用

一、导包

pip install numpy
import numpy as np

二、Numpy中的数组

1. Numpy中的数组

import numpy as np 
my_array = np.array([1, 2, 3, 4, 5]) 
print(type(my_array))    #<class 'numpy.ndarray'>
print(my_array)             #[1 2 3 4 5]
#查看数组维度信息
print(a.shape)               #(5, 5)

2. 创建数组

#1. 指定维度0填充
a = np.zeros((2,2))   # Create an array of all zeros
print(a)              # Prints "[[ 0.  0.]
                      #          [ 0.  0.]]"

#2. 指定维度1填充
b = np.ones((1,2))    # Create an array of all ones
print(b)              # Prints "[[ 1.  1.]]"

#3. 指定维度,指定数填充
c = np.full((2,2), 7)  # Create a constant array
print(c)               # Prints "[[ 7.  7.]
                       #          [ 7.  7.]]"

#4. 这个我怎么说.....
d = np.eye(3)         # Create a 2x2 identity matrix
print(d)              # [[1. 0. 0.]
                      # [0. 1. 0.]
                      # [0. 0. 1.]]
#5. 指定维度随机填充
e = np.random.random((2,2))  # Create an array filled with random values
print(e)                     # Might print "[[ 0.91940167  0.08143941]
                             #               [ 0.68744134  0.87236687]]"

3. 数组类型

  • 类型:布尔(bool)、整数(int)、无符号整数(uint)、浮点数(float)和复数
  • 类型转换
import numpy as np
x = np.float32(1.0)
y = np.int_([1,2,4])
z = np.arange(3, dtype=np.uint8)
print(x)        #1.0
print(y)        #[1 2 4]
print(z)        #[0 1 2]
#指定dtype
np.array([1, 2, 3], dtype='f')     #array([ 1.,  2.,  3.], dtype=float32)
#使用.astype()方法(首选)或类型本身作为函数
z.astype(float)                    #array([  0.,  1.,  2.])
np.int8(z)                         #array([0, 1, 2], dtype=int8)
  • 查看类型
z.dtype                      #dtype('uint8')
#是否为整数
d = np.dtype(int)            #dtype('int32')
np.issubdtype(d, int)        #True
np.issubdtype(d, float)      #False

4. 切片

切片(Slicing): 与Python列表类似,可以对numpy数组进行切片。由于数组可能是多维的,因此必须为数组的每个维指定一个切片

a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])
#需要指定每个维度,然后指定一个切片
b = a[:2, 1:3]
print(b)         #[[2 3]
                 # [6 7]]
#引用类型,修改指针值后,其余指向该值指针值发生变化
print(a[0, 1])   # Prints "2"
b[0, 0] = 77     # b[0, 0] is the same piece of data as a[0, 1]
print(a[0, 1])   # Prints "77"
  • 整数索引与切片索引混合使用
a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])

row_r1 = a[1, :]    # Rank 1 view of the second row of a
row_r2 = a[1:2, :]  # Rank 2 view of the second row of a
print(row_r1, row_r1.shape)  # Prints "[5 6 7 8] (4,)"
print(row_r2, row_r2.shape)  # Prints "[[5 6 7 8]] (1, 4)"

col_r1 = a[:, 1]
col_r2 = a[:, 1:2]
print(col_r1, col_r1.shape)  # Prints "[ 2  6 10] (3,)"
print(col_r2, col_r2.shape)  # Prints "[[ 2]
                             #          [ 6]
                             #          [10]] (3, 1)"

整数数组索引: 使用切片索引到numpy数组时,生成的数组视图将始终是原始数组的子数组。 相反,整数数组索引允许你使用另一个数组中的数据构造任意数组。

import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])

print(a[[0, 1, 2], [0, 1, 0]])                # Prints "[1 4 5]"

print(np.array([a[0, 0], a[1, 1], a[2, 0]]))  # Prints "[1 4 5]"

print(a[[0, 0], [1, 1]])                      # Prints "[2 2]"

print(np.array([a[0, 1], a[0, 1]]))           # Prints "[2 2]"
  • 整数数组索引的一个有用技巧是从矩阵的每一行中选择或改变一个元素
a = np.array([[1,2,3], [4,5,6], [7,8,9], [10, 11, 12]])

print(a)  # prints "array([[ 1,  2,  3],
          #                [ 4,  5,  6],
          #                [ 7,  8,  9],
          #                [10, 11, 12]])"

b = np.array([0, 2, 0, 1])

print(a[np.arange(4), b])  # Prints "[ 1  6  7 11]"

a[np.arange(4), b] += 10

print(a)  # prints "array([[11,  2,  3],
          #                [ 4,  5, 16],
          #                [17,  8,  9],
          #                [10, 21, 12]])
  • 布尔数组索引: 布尔数组索引允许你选择数组的任意元素。通常,这种类型的索引用于选择满足某些条件的数组元素。
import numpy as np

a = np.array([[1,2], [3, 4], [5, 6]])

bool_idx = (a > 2)   # Find the elements of a that are bigger than 2;
                     # this returns a numpy array of Booleans of the same
                     # shape as a, where each slot of bool_idx tells
                     # whether that element of a is > 2.

print(bool_idx)      # Prints "[[False False]
                     #          [ True  True]
                     #          [ True  True]]"

# of bool_idx
print(a[bool_idx])  # Prints "[3 4 5 6]"

print(a[a > 2])     # Prints "[3 4 5 6]"

5. 索引方法

  • Ellipsis 扩展为:x.ndim生成与长度相同的选择元组所需的对象数。可能只存在一个省略号。
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x[...,0]    #array([[1, 2, 3],
            #    [4, 5, 6]])
  • newaxis对象用于将结果选择的维度扩展一个单位长度维度。 添加的维度是选择元组中newaxis对象的位置。
x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
x[:,np.newaxis,:,:].shape    #(2, 1, 3, 1)

注意: numpy.newaxis可以在所有切片操作中使用newaxis对象来创建长度为1的轴。 newaxis是'None'的别名,'None'可以代替它使用相同的结果

三、数组中的数学

  1. 普通运算
import numpy as np

x = np.array([[1,2],[3,4]], dtype=np.float64)
y = np.array([[5,6],[7,8]], dtype=np.float64)

#加
print(x + y)
print(np.add(x, y))
# [[ 6.0  8.0]
#  [10.0 12.0]]

#减
print(x - y)
print(np.subtract(x, y))
# [[-4.0 -4.0]
#  [-4.0 -4.0]]

#乘
print(x * y)
print(np.multiply(x, y))
# [[ 5.0 12.0]
#  [21.0 32.0]]

#除
print(x / y)
print(np.divide(x, y))
# [[ 0.2         0.33333333]
#  [ 0.42857143  0.5       ]]

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

推荐阅读更多精彩内容

  • 基础篇NumPy的主要对象是同种元素的多维数组。这是一个所有的元素都是一种类型、通过一个正整数元组索引的元素表格(...
    oyan99阅读 5,122评论 0 18
  • NumPy是Python中关于科学计算的一个类库,在这里简单介绍一下。 来源:https://docs.scipy...
    灰太狼_black阅读 1,228评论 0 5
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想从新回忆下,请看看Python Tutoria...
    舒map阅读 2,573评论 1 13
  • 原文:Quickstart tutorial 译者:Reverland 来源:试验性NumPy教程(译) 2.1 ...
    布客飞龙阅读 1,346评论 5 52
  • 先决条件 在阅读这个教程之前,你多少需要知道点python。如果你想重新回忆下,请看看Python Tutoria...
    62a249be5865阅读 2,713评论 0 3