Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >循环遍历np.array的行的for循环的替代方法

循环遍历np.array的行的for循环的替代方法
EN

Stack Overflow用户
提问于 2021-04-22 23:28:03
回答 2查看 59关注 0票数 1

我有两个numpy数组。我想在consume函数中使用数组p的每一行中的值作为数组food的索引。不幸的是,当p达到2000行的大小时,使用for循环需要很长时间。

consume函数中会有比for循环更快的替代方法吗?我将感谢任何人帮助我解决这个问题。

代码语言:javascript
运行
AI代码解释
复制
import numpy as np
dt = 0.1
k = 2
p = np.array([[50, 50, 50],
              [ 0,  0,  0],
              [51, 51, 50],
              [52, 50, 51],
              [52, 51, 51],
              [50, 49, 49],
              [50, 49, 48],
              [51, 50, 50],
              [49, 49, 50],
              [53, 49, 51],
              [50, 51, 50],
              [51, 52, 51]])
food = np.ones((101, 101, 101))

def consume():
    for i in range(1, p.shape[0]):
         e = p[i - 1:i]
         food[e[0, 0], e[0, 1], e[0, 2]] -= dt * k

consume()
EN

回答 2

Stack Overflow用户

发布于 2021-04-23 00:02:41

阅读Indexing Multi-Dimensional Arrays

基本上,如果你想从食物中访问food[x1, y1, z1]food[x2, y2, z2] ... food[xn, yn, zn]值,你可以使用food[[x1, x2, .. , xn], [y1, y2, .., yn], [z1, z2, .., zn]]

使用:

代码语言:javascript
运行
AI代码解释
复制
food[p[:, 0], p[:, 1], p[:, 2]] -= dt*k
票数 1
EN

Stack Overflow用户

发布于 2021-04-23 00:52:40

在这里,您根本不需要循环。奇特的索引将允许您通过转置p并将其转换为tuple来精确地执行您想要的操作。

如果您没有副本,只需按原样使用索引:

代码语言:javascript
运行
AI代码解释
复制
food = np.ones((101, 101, 101))
food[tuple(p[:-1].T)] -= dt * k

我不确定为什么你会以如此奇怪的方式迭代。范围在上界上是排他的。要遍历p的所有行,只需使用for i in range(p.shape[0]):,甚至只需使用for i in range(len(p)):。你甚至可以做for e in p:。如果这确实是您想要的,则不需要在上面的表达式中设置p的子集:

代码语言:javascript
运行
AI代码解释
复制
food[tuple(p.T)] -= dt * k

此外,当您可以执行e = p[i - 1] (或者只使用i,或者将其设置为循环变量)时,不需要对e = p[i - 1:i]进行索引。然后,您可以将其赋值给food[tuple(e)] = ...,而不是2D索引。

如果p中有重复的索引,您可以使用np.subtract.at处理它们

代码语言:javascript
运行
AI代码解释
复制
np.subtract.at(food, tuple(p[:-1].T), dt * k)

此操作是无缓冲的,因此它将通过将重复索引减去两次来实现。它可以就地工作。

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

https://stackoverflow.com/questions/67222042

复制
相关文章
css 使元素居中
<div style="text-align:center;">居中显示</div>
lin_zone
2018/08/15
2.4K0
css 使元素居中
求两列表之间相同与不同元素
针对两列表找相同与不同元素问题,提出利用set()方法,通过Python输入代码实验,证明该方法是有效的,本文的方法只比较了两个列表之间的问题,未来希望能够实现更多列表同时求相同与不同元素。
算法与编程之美
2023/08/22
1550
求两列表之间相同与不同元素
怎样使元素可编辑
作者:http://lucky.myrice.com E-mail:amxh@21cn.com
Java架构师必看
2021/03/22
3160
javascript 数组排序,找到相同元素[通俗易懂]
小白前端一个,公司项目,里面有一个数组增加,删除,去重,排序,找到相同元素个数等等…
全栈程序员站长
2022/08/14
1K0
根据某列相同元素求和
下面是一个需要计算相同基因的exon的长度的文件,即根据相同的基因,先计算基因的起点到终点的距离,再对相同的基因的的exon距离求和
生信编程日常
2020/06/11
1K0
根据某列相同元素求和
常见的块状元素与内联元素
xHTML究竟有多少个标签?绝大部分人都不能得出一个正确的答案,现在就有个机会,自己数数。答案:91个,哈哈,被你找到了~
Twcat_tree
2022/11/30
5800
JS取两个数组相同的元素
function arrayIntersection ( a, b ) { var ai=0, bi=0; var result = new Array(); while ( ai < a.length && bi < b.length ) { if ( a[ai] < b[bi] ) { ai++; } else if ( a[ai] > b[bi] ) { bi++; } else /* they're equal
用户7705674
2021/09/24
6.3K0
行内元素与块元素间的转换及行内块元素
在HTML中行内元素和块元素间的区分,本质上是其标签默认存在了一个 display 属性,当 display 属性的值为 block 那么所对应的标签即为块元素,反之当值为 inline 则标签为行内元素。
摸鱼的G
2023/02/22
1.2K0
行内元素与块元素间的转换及行内块元素
jQuery 隐藏具有指定class属性值的元素
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>前端</title> <style> .antzone{ width:200px; height:100px; background:#ccc; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script> $(document).ready(func
IT工作者
2022/02/17
5.1K0
Selenium 元素checkbox元素操作与元素等待
检测百度页面搜索按钮是否存在,存在就输入关键词“自学网 Selenium” 然后点击搜索
清风穆云
2021/08/09
1.6K0
HTML中的内联元素与块级元素
文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书
Tyan
2022/05/09
3.3K0
【前端】使用CSS使元素居中的几种方式
zhaokang555
2023/10/17
2260
PHP分割两个数组的相同元素和不同元素的两种方法
一、举例说明 例如有两个数组A和B(当然这个A和B也可以是key=>value形式) A = array('tt','cc','dd','mm') B = array('ad','tt','cc','qq') 希望得到的结果是: sameArr = array('tt','cc') A = array('dd','mm') B = array('ad','qq') 二、解决方案 2.1、方法一:for循环取出数据 1、for循环一个A数组; 2、使用array_search判断元素是否存在B数组中; 3
蛋未明
2018/06/07
2.3K0
list去除相同String、对象元素
一、当相同元素为String时 方法一 /** * List去重 */ private List<String> removeDuplicate(List<String> list) { LinkedHashSet<String> set = new LinkedHashSet<String>(list.size()); set.addAll(list); list.clear(); list.addAll(
崔笑颜
2020/06/08
8170
python删除序列相同的元素并保持原顺序
示例: 1 2 3 4 5 6 7 8 9 1、列表中有重复的元素 a = [1,5,2,1,9,1,5,10] 2、字典中有重复的键值对 a = [ {'x': 1,'y': 2}, {'x': 1,'y': 3}, {'x': 1,'y': 2}, {'x': 2,'y': 4} ] 针对这些,我们需要去重,并且还要保持原顺序不变,该如何操作呢? 这里我们使用函数来解决。 1、列表去重 1 2 3 4 5 6 7 8 9
dogfei
2020/07/31
8240
LeetCode 2121. 相同元素的间隔之和(前缀和)
arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。
Michael阿明
2022/01/07
5920
iOS求两个数组里的相同元素
这个比起直接遍历做得优一点的地方在于先把A数组中元素剔除出来(范围在B内),然后再进行遍历,这也得益于数组已经排好序。
清墨
2019/04/23
2.5K0
button元素的id与onclick的函数名字相同 导致方法失效的问题
需求需要在原先页面添加一个按钮,触发一个function,如此简单的操作,却无意间发现了一个问题。(还是对html了解的太少)
陈灬大灬海
2019/01/28
1.7K0
button元素的id与onclick的函数名字相同 导致方法失效的问题
元素的显示与隐藏
在CSS中有三个显示和隐藏的单词比较常见,我们要区分开,他们分别是 display visibility 和 overflow。
星辰_大海
2020/09/30
4.4K0
2021-10-17 JS使模板元素进行移动(拖拽模板元素)
原理很简单,就是将元素设置为绝对定位,然后监听鼠标按下(mousedown),移动事件(mousemove),改变元素的top、left值就行。
无道
2021/10/19
2.5K0
2021-10-17 JS使模板元素进行移动(拖拽模板元素)

相似问题

如何使附加的元素具有与当前元素相同的功能

13

如何使元素具有相同的"src“

116

如何使元素具有相同的高度

31

使子元素具有与父元素相同的宽度和边框

14

无法使子元素与父元素IE具有相同的高度

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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