首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何加速Numpy数组过滤/选择?

如何加速Numpy数组过滤/选择?
EN

Stack Overflow用户
提问于 2018-11-22 15:56:53
回答 2查看 554关注 0票数 1

我有大约40k行,我想在这些行上测试各种选择组合。我所说的选择是指布尔掩码。掩模/滤镜的数量约为250 is。

当前简化的代码如下:

代码语言:javascript
运行
AI代码解释
复制
np_arr = np.random.randint(1, 40000, 40000)
results = np.empty(250000000)
filters = np.random.randint(1, size=(250000000, 40000))
for i in range(250000000):
    row_selection = np_arr[filters[i].astype(np.bool_)] # Select rows based on next filter
    # Performing simple calculations such as sum, prod, count on selected rows and saving to result
    results[i] = row_selection.sum() # Save simple calculation result to results array

我尝试了Numba和Multiprocessing,但由于大多数处理都是在过滤器选择中,而不是计算中,这没有太大帮助。

解决这个问题最有效的方法是什么?有没有办法将其并行化?就我所见,我需要遍历每个过滤器,然后分别计算sum,prod,count等,因为我不能并行应用过滤器(即使应用过滤器后的计算非常简单)。

感谢您在性能改进/加速方面的任何建议。

EN

回答 2

Stack Overflow用户

发布于 2018-11-22 17:09:26

要在Numba中获得良好的性能,只需避免掩蔽,从而避免非常昂贵的阵列拷贝。您必须自己实现筛选器,但您提到的筛选器应该没有任何问题。

并行化也很容易做到。

示例

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import numba as nb

max_num = 250000 #250000000
max_num2 = 4000#40000
np_arr = np.random.randint(1, max_num2, max_num2)
filters = np.random.randint(low=0,high=2, size=(max_num, max_num2)).astype(np.bool_)

#Implement your functions like this, avoid masking
#Sum Filter
@nb.njit(fastmath=True)
def sum_filter(filter,arr):
  sum=0.
  for i in range(filter.shape[0]):
    if filter[i]==True:
      sum+=arr[i]
  return sum

#Implement your functions like this, avoid masking
#Prod Filter
@nb.njit(fastmath=True)
def prod_filter(filter,arr):
  prod=1.
  for i in range(filter.shape[0]):
    if filter[i]==True:
      prod*=arr[i]
  return sum

@nb.njit(parallel=True)
def main_func(np_arr,filters):
  results = np.empty(filters.shape[0])
  for i in nb.prange(max_num):
    results[i]=sum_filter(filters[i],np_arr)
    #results[i]=prod_filter(filters[i],np_arr)
  return results
票数 3
EN

Stack Overflow用户

发布于 2018-11-22 16:40:53

改进的一种方法是将as_type移到循环之外。在我的测试中,它将执行时间减少了一半以上。为了进行比较,请检查以下两个代码:

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import time

max_num = 250000 #250000000
max_num2 = 4000#40000
np_arr = np.random.randint(1, max_num2, max_num2)
results = np.empty(max_num)
filters = np.random.randint(1, size=(max_num, max_num2))
start = time.time()
for i in range(max_num):
    row_selection = np_arr[filters[i].astype(np.bool_)] # Select rows based on next filter
    # Performing simple calculations such as sum, prod, count on selected rows and saving to result
    results[i] = row_selection.sum() # Save simple calculation result to results array

end = time.time()
print(end - start)

采用2.12

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
import time

max_num = 250000 #250000000
max_num2 = 4000#40000
np_arr = np.random.randint(1, max_num2, max_num2)
results = np.empty(max_num)
filters = np.random.randint(1, size=(max_num, max_num2)).astype(np.bool_)
start = time.time()
for i in range(max_num):
    row_selection = np_arr[filters[i]] # Select rows based on next filter
    # Performing simple calculations such as sum, prod, count on selected rows and saving to result
    results[i] = row_selection.sum() # Save simple calculation result to results array

end = time.time()
print(end - start)

采用0.940

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53434568

复制
相关文章
为什么ConcurrentHashMap不允许插入null值?
在 Java 语言中,ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插入 null 值的,而 HashMap 又允许 key 或 value 插入 null 值,这到底是为什么呢?
磊哥
2022/05/09
1.9K0
为什么ConcurrentHashMap不允许插入null值?
为什么ConcurrentHashMap不允许插入null值?
在Java语言中,给ConcurrentHashMap和Hashtable这些线程安全的集合中的Key或者Value插入 null(空) 值的会报空指针异常,但是单线程操作的HashMap又允许 Key 或者 Value 插入 null(空) 值。这到底是为什么呢?
Tom弹架构
2022/08/22
2.1K0
为什么ConcurrentHashMap不允许插入null值?
SystemVerilog(五)-文本值
System Verilog 扩展了 Verilog 的 教据类型 , 增强了指定文本值的方法。在介绍文本值之前我们先简单回忆一下HDL中的四个状态数据值。
碎碎思
2022/04/14
1.2K0
SystemVerilog(五)-文本值
1.1、文本插值
Vue 使用一种基于 HTML 的模板语法,使我们能够声明式地将其组件实例的数据绑定到呈现的 DOM 上。所有的 Vue 模板都是语法层面合法的 HTML,可以被符合规范的浏览器和 HTML 解析器解析。
张果
2022/11/12
8.9K0
1.1、文本插值
文本txt实现bat锁机代码(整蛊可用)
1、Net User 作用:添加或更改用户帐号或显示用户帐号信息。 命令格式:Net user [username [password | *] [options]] [/domain] 有关参数说明: ·键入不带参数的Net user查看计算机上的用户帐号列表 ·username添加、删除、更改或查看用户帐号名 ·password为用户帐号分配或更改密码 ·提示输入密码 2、Net Localgroup 作 用:添加、显示或更改本地组。 命令格式:Net localgroup groupname {/add [/comment:"text "] | /delete} [/domain] 有关参数说明:
HACK学习
2019/08/06
5.6K3
文本txt实现bat锁机代码(整蛊可用)
jQuery 文本属性值
​ jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
梨涡浅笑
2022/05/08
3.1K0
jQuery 文本属性值
jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
清出于兰
2020/10/26
1.8K0
jQuery 文本属性值
jQuery的文本属性值常见操作有三种:html() / text() / val() ; 分别对应JS中的 innerHTML 、innerText 和 value 属性。
星辰_大海
2020/10/09
2.6K0
jQuery 文本属性值
MyBatis通用mapper插入,更新null值问题
MyBatis通用mapper插入,更新null值问题 Mybatis通用Mapper updateByPrimarykey()和insert()方法报错,提示jdbctype错误。 Exception in thread “main” org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #6 with JdbcType OTHER . Try setting a different Jdb
用户1212940
2022/04/13
1.3K0
python在mysql中插入null空值
python在mysql中插入null空值 sql = “INSERT INTO MROdata (MmeUeS1apId) VALUES (%s)”%‘NULL’ %s没有引号,可以将“null”中null写进数据库,达到NULL值效果。
kirin
2020/12/03
8.4K0
将map按照值排序
值里面存放的是一个对象需要根据id排序 将相同的人放在一起 List<Map.Entry<String, CorrectRate>> list = new LinkedList<Map.Entry<String, CorrectRate>>(correctRateOm.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, CorrectRate>>() {
崔笑颜
2020/06/08
9360
将数组中空值字段赋默认值!
在上面代码中,首先判断传入的对象是否为数组,如果是数组则对其进行map()操作,否则将其转换成键值对数组并调用 Object.fromEntries() 方法生成一个新的对象。
执行上下文
2023/07/24
2970
将数组中空值字段赋默认值!
mysql将大数据插入表中方法
1 数据量不是很大,有几千行数据.先用notepad对数据进行编辑,结果如下 insert into `web4399_vote`.`frxz2_hlwjhj_code` (active_code) values('s001asdf87mo'), ('s001sfsdfy5e'), ('dfsdfc3euv'), ('s0sdfsd6k4j6z'), ('s00dfsdfk59'), (asdfnth'), ('s00asdf246l'), ('s001sdfsdf1h'); 然后,
闵开慧
2018/03/30
1.7K0
还分不清左值,右值,将亡值?看这里!
来源:https://www.cnblogs.com/zpcdbky/p/5275959.html
编程珠玑
2019/11/24
6.2K0
Excel: 数据取整函数(向上取整,向下取整)
文章背景:在进行数据处理时,有时需要对数据进行取整,以满足数据分析的要求。下面对Excel自带的一些取整函数进行介绍。
Exploring
2022/09/20
4.4K0
Excel: 数据取整函数(向上取整,向下取整)
为什么HashMap的key允许空值,而HashTable却不允许
HashMap在put的时候会调用hash()方法来计算key的hashcode值,可以从hash算法中看出当key==null时返回的值为0。因此key为null时,hash算法返回值为0,不会调用key的hashcode方法。
凌云Cloud
2020/10/30
1.8K0
为什么HashMap的key允许空值,而HashTable却不允许
Mybatis插入时返回自增id的值
1.先取出最大id值,在程序中加1 2.调用数据库api取得最大id值,然后插入 ...
4xx.me
2022/06/09
1.9K0
Mybatis插入时返回自增id的值
数据分析EPHS(6)-使用Spark计算数列统计值
前两篇中咱们分别介绍了使用Excel、Python和Hive SQL计算统计值,这次咱们使用Spark SQL来计算统计值。
石晓文
2019/07/30
1.4K0
用MapReduce分析Hbase将结果插入mysql中
从HBASE读取清洗过的数据,写入到mysql的表中 NewInstallUserRunner.java 计算新增用户入口类 NewInstallUserRunner的所有属性方法 main方法:
Albert陈凯
2018/04/04
1.6K0
用MapReduce分析Hbase将结果插入mysql中
点击加载更多

相似问题

输入文本框不允许我插入值

112

无法将值NULL插入列‘;列不允许空值。插入失败。()

14

无法将值NULL插入'CompanyId‘列不允许空值。插入失败

30

如何将插入位置所在的整串插入到RichTextBox中?

21

无法将值NULL插入'DeletedDatabaseRecord‘列,.;列不允许空值。插入失败

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档