Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

不再通过遍历,对数组中的元素进行运算,利用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数

下面是示例代码:

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 20 17:18:11 2020 @author: pan
"""
import time
import numpy as np arr = np.random.randint(30000, size=(1000, 600), dtype='int16') def calc(arr):
condlist = [arr<5000,5000<=arr<10000,15000<=arr<20000,20000<=arr<25000,arr>=25000]
funclist = [lambda arr:arr*0.55,lambda arr:arr*0.81,lambda arr:arr*0.972,lambda arr:arr*1.067,lambda arr:arr*1.5]
out = np.piecewise(arr, condlist, funclist)
return out # 循环方法
result = np.zeros((1000,600))
t1 = time.time()
for i in range(1000):
for j in range(600):
tep = calc(arr[i][j])
result[i][j] = tep
print('LOOP Time used: {} sec'.format(time.time()-t1)) # 使用frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数
# frompyfunc(func, nin, nout)
# func 是要进行转化的函数 nin是输入参数的个数 nout是返回值的个数
calc_ufunc = np.frompyfunc(calc, 1, 1)
t2 = time.time()
img1 = calc_ufunc(arr).astype(np.float)
print('frompyfunc Time used: {} sec'.format(time.time()-t2)) print('calc data has done')

输出:

LOOP Time used: 20.85917043685913 sec
frompyfunc Time used: 12.103625059127808 sec

可以看出,代码方便了很多,但速度提高不明显,接下来会探究如何提高速度

欢迎关注公众号,获取更多精彩内容。公众号将不定期更新精品技术博客、学习心得

Numpy.frompyfunc()将计算单个值的函数转化为计算数组中每个元素的函数的更多相关文章

  1. 面试题-->写一个函数,返回一个数组中所有元素被第一个元素除的结果

    package com.rui.test; import java.util.Random; /** * @author poseidon * @version 1.0 * @date:2015年10 ...

  2. reduce计算数组中每个元素出现的次数 数组去重的几种方式 将多维数组转化为一维

    // js计算数组中每个元素出现的次数 // var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; // var countedNames = ...

  3. JS对象 数组排序sort() sort()方法使数组中的元素按照一定的顺序排列。 语法: arrayObject.sort(方法函数)

    数组排序sort() sort()方法使数组中的元素按照一定的顺序排列. 语法: arrayObject.sort(方法函数) 参数说明: 1.如果不指定<方法函数>,则按unicode码 ...

  4. js计算数组中每个元素出现的次数

    计算数组中每个元素出现的次数 var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; var countedNames = names.redu ...

  5. Numpy修改数组中的元素值

    import numpy as np x = np.arange(8) # [0 1 2 3 4 5 6 7] # 在数组尾部追加一个元素 np.append(x,10) # array([ 0, 1 ...

  6. python中print()函数的“,”与java中System.out.print()函数中的“+”

    python中的print()函数和java中的System.out.print()函数都有着打印字符串的功能. python中: print("hello,world!") 输出 ...

  7. 统计数组中各个元素出现的次数,元素取值范围为:1到N

     问题描述: * 给定一个整数数组a,长度为N,元素取值范围为[1,N]. * 统计各个元素出现的次数,要求时间复杂度为O(N),空间复杂度为O(1). * 可以改变原来数组结构.  思路: * 从第 ...

  8. Js数组对象的属性值升序排序,并指定数组中的某个对象移动到数组的最前面

    需求整理: 本篇文章主要实现的是将一个数组的中对象的属性值通过升序的方式排序,然后能够让程序可以指定对应的数组对象移动到程序的最前面. 数组如下所示: var arrayData= [{name: & ...

  9. golang中数组指针和指针数组当做函数参数如何修改数组中的值

    先理解:数组指针它的类型时指针,指针数组它的类型时数组 1. 数组指针当做函数的参数 package main import "fmt" func changeData(dataA ...

随机推荐

  1. java及python调用RabbitMQ

    1,python调用MQ发送消息(生产者),话不多说,直接上干货 import pika 如下图 2.java调用MQ发送消息(生产者) 具体代码如下: python 的代码如下 connection ...

  2. namp相关命令大全

    常用功能: -探测主机存活- 扫描端口- 探测主机操作系统信息- 检测漏洞 nmap 常用的几个参数 nmap -v ip 显示详细的扫描过程 nmap -p  ip  扫描指定端口 nmap -A ...

  3. 【CTSC1999】【带权并查集 】月亮之眼

    Description 吉儿是一家古董店的老板娘,由于她经营有道,小店开得红红火火.昨天,吉儿无意之中得到了散落民间几百年的珍宝-月亮之眼.吉儿深知"月亮之眼"价值连城:它是由许多 ...

  4. Atcoder Grand Contest 001 D - Arrays and Palindrome(构造)

    Atcoder 题面传送门 洛谷题面传送门 又是道思维题,又是道把我搞自闭的题. 首先考虑对于固定的 \(a_1,a_2,\dots,a_n;b_1,b_2,\dots,b_m\) 怎样判定是否合法, ...

  5. Codeforces 632F - Magic Matrix(暴力 bitset or Prim 求最小生成树+最小瓶颈路)

    题面传送门 开始挖老祖宗(ycx)留下来的东西.jpg 本来想水一道紫题作为 AC 的第 500 道紫题的,结果发现点开了道神题. 首先先讲一个我想出来的暴力做法.条件一和条件二直接扫一遍判断掉.先将 ...

  6. #pragma warning(disable:4996)

    VS使用中常常会遇到一些过时或者不安全的函数,编译会报错: 错误 C4996 'sscanf': This function or variable may be unsafe. Consider u ...

  7. EXCEL-批量下拉填充

    3.批量下拉填充  =>    全选->Ctrl+G定位空值->随意找一个空白单元格输入=还有此单元格想要填充的内容->按Ctrl+Enter,等待几秒,即可,批量下拉填充:

  8. CentOS6忘记root密码如何重置

    CentOS6忘记root密码,如何重置密码 ①     重启服务器,按"e"键进入修改系统开机项界面 ②    选择内核项,按"e"进入其中进行配置 在文件内 ...

  9. Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?

    作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++.嵌入式.Linux. 关注下方公众号,回复[书籍],获取 Linux.嵌入式领域经典书籍:回复[PDF],获取所有原创文章( PDF 格式). ...

  10. 【STM32】使用SDIO进行SD卡读写,包含文件管理FatFs(三)-SD卡的操作流程

    其他链接 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(一)-初步认识SD卡 [STM32]使用SDIO进行SD卡读写,包含文件管理FatFs(二)-了解SD总线,命令的相关介绍 ...