首页 > 其他分享 >numpy广播机制与高级索引使用

numpy广播机制与高级索引使用

时间:2023-01-20 17:00:24浏览次数:45  
标签:print 索引 广播 数组 np array numpy

numpy广播机制与高级索引使用

NumPy 比一般的 Python 序列提供更多的索引方式。

除了整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

  1. 类型转换
import numpy as np
a = np.array(
[
    [1,2,3,4],
    [5,6,7,8]
])
print(a.shape)  # (2, 4)
print(a.dtype)  # int32
b = a * 2.0
print(b.dtype)  # float64
c = b.astype(np.float32)
print(c.dtype)  # float32
d = a + b + c
print(d.dtype)  # float64
  1. 整数数组索引

以数组为索引

import numpy as np 
 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
rows = [0,1,2]
cols = [0,1,0]
y = x[rows, cols]
print (y)  # -[1,4,5] 分别取x中(0,0)(1,1)(2,0)处的元素

用..省略前几个维度,只对最后几个维度做切片


a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)  # [[5 6] [8 9]]
print(c)  # [[5 6] [8 9]]
print(d)  # [[2 3] [5 6] [8 9]]
  1. 布尔索引
    通过布尔数组进行索引
a = np.array(
    [
        [1,2,3,4],
        [5,6,7,8]
    ]
)
b = np.array(
    [
        [1,1,3,3],
        [5,6,7,8]
    ]
)
c = (a==b)
print(c)
print(c.dtype, c.shape)
# [[ True False  True False]
#  [ True  True  True  True]]
# bool (2, 4)
e = a[b>5]
print(e)
# [6 7 8]
  1. 花式索引
    花式索引根据索引数组的值作为目标数组的某个轴的下标来取值。
    对一维数组来说,索引的结果是对应位置的元素
import numpy as np
x = np.arange(9)
x2 = x[[0,6]]
print(x2)  # [0 6]

对二维数组来说,索引的结果的对应下标的行

import numpy as np
x = np.arange(8).reshape((4,2))
print(x)
print(x[[0,2]])
# [[0 1]
#  [2 3]
#  [4 5]
#  [6 7]]
# [[0 1]
#  [4 5]]
  1. NumPy广播(Broadcast)
    广播是numpy对不同形状的数组进行数值计算的方式。
  • 如果数组a、b形状相同,即a.shape==b.shape
    那么a*b的结果就是ayub数组相应位置相乘。
import numpy as np 
 
a = np.array([1,2,3,4]) 
b = np.array([10,20,30,40]) 
c = a * b 
print (c)
# [10, 40, 90, 160]
  • 当运算中的2个数组形状不同时,numpy将触发广播机制
import numpy as np
a = np.array([
    [0,0,0],
    [10,10,10],
    [20,20,20],
    [30,30,30]
])
b = np.array([0,1,2])
print(a+b)
# [[ 0  1  2]
#  [10 11 12]
#  [20 21 22]
#  [30 31 32]]
import numpy as np
a = np.zeros([3,4,2,3,2])
b = np.ones([2,3,2])
print(a+b)
# 但是a = np.zeros([3,4,4,3,2])就会报错,倍数是不行的!

简单来说,广播机制就是在不足的维度上进行复制拓展
广播的规则:
(1)让所有数组都向其中维度最大的数组看齐,不足在前面补1.
(2)输出数组的形状是输入数组形状的各个维度上的最大值
(3)进行广播的某个维度的长度需要与输出数组对应长度相等或者为1.
若条件不满足,抛出 "ValueError: frames are not aligned" 异常。

标签:print,索引,广播,数组,np,array,numpy
From: https://www.cnblogs.com/openwindow-cc/p/17062890.html

相关文章

  • 面试题-什么是最左前缀法则?什么时候索引将失效?
    什么是最左前缀法则?什么时候索引将失效?如果索引了多列(联合索引),要遵守最左前缀法则。最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列,索......
  • Windows下udp广播【C++】
     最近学习了下Windows下的Socket使用,在这里记录一下。 前置准备 在使用api前,需要做一些必要的准备。头文件包含  //包括Winsock2头文件使用WinsockAPI,......
  • 一种面向业务配置基于JSF广播定时生效的工具
    作者:京东物流王北永姚再毅李振1背景目前,ducc实现了实时近乎所有配置动态生效的场景,但是配置是否实时生效,不能直观展示每个机器上jvm内对象对应的参数是否已变更为准......
  • MySQL索引使用宝典已送达,快来查缺补漏 转载
    这一篇文章来聊一聊如何用好MySQL索引。  为了更好地进行解释,我创建了一个存储引擎为InnoDB的表user_innodb,并批量初始化了500W+条数据。包含主键id、姓名字段(name)、......
  • numpy 矩阵的用法
    b=list(range(5))b [0,1,2,3,4] #列表区别a=np.arange(5)aarray([0,1,2,3,4])#矩阵生成一个1*24的矩阵,在将她变成2*3*4的数体c=np.arange(24).reshape(2,3,4......
  • ElasticSearch全文搜索引擎 -Spring Boot操作ES(SpringData概述、Spring Data Elastics
    文章目录​​1.SpringData概述​​​​2.SpringDataElasticsearch​​​​3.实现基本操作​​​​4.ElasticSearch操作文档​​​​5.ElasticSearch原生API操作工具......
  • Elasticsearch笔记(集群插件、kibana、什么是倒排索引)
    Elasticsearch中的集群、节点、索引、文档、类型集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。群集由唯一名称标识,......
  • 浅谈如何设计MySQL索引
    文章目录​​一、索引的代价​​​​二、如何设计索引​​​​1、索引列的类型尽量小​​​​2、索引的选择离散性高的​​​​3、只为用于搜索、排序或分组的列创建索引​......
  • Numpy基本使用方法
    Numpy基本使用方法第一节创建数组importnumpyasnpimportrandom#创建数组a=[1,2,3,4,5]a1=np.array(a)print(a1)#[12345]b=range(10)b1=......
  • 在不使用cv2等库的情况下利用numpy实现双线性插值缩放图像
    起因我看到了一个别人的作业,他们老师让不使用cv2等图像处理库缩放图像算法介绍如果你仔细看过一些库里缩放图像的方法参数会发现有很多可选项,其中一般默认是使用双线性......