arrays - 循环对 numpy 数组中的 i+1 执行操作
问题描述
我有一个 numpy 数组,我想在每一行中取 3 个数字,从下一行减去它们并将这些值存储在另一个数组中。
就像是
for i in array:
a = i - i+1
我知道这是非常错误的,但至少这给出了我想要的想法。
显然 i+1 只会导致值 + 1 然后我所拥有的只是 a = 1,1,1
当我说 i+1 时,我的意思是下一个。
例如:
input = np.array([[4,4,5], [2,3,1],[1,2,0]])
output = np.array([2,1,4],[1,1,1]) etc....
在数千行上迭代执行此操作的最佳方法是什么?
解决方案
IIUC,而不是循环,您可以使用 将数组 1 向上移动np.roll
,从原始输入中减去它,然后取除最后一个以外的所有结果数组(因为从最后一个数组中没有什么可以减去):
>>> inp = np.array([[4,4,5], [2,3,1],[1,2,0]])
>>> inp
array([[4, 4, 5],
[2, 3, 1],
[1, 2, 0]])
>>> (inp - np.roll(inp,-1,axis=0))[:-1]
array([[2, 1, 4],
[1, 1, 1]])
或者,更直接的方法就是使用numpy
索引:
>>> inp[:-1] - inp[1:]
array([[2, 1, 4],
[1, 1, 1]])
推荐阅读
- python - 机器学习:我是否应该在带有 bagging 和决策树的交叉验证中使用“scoring='precision_weighted'”和不平衡数据集?
- reactjs - 如何使用 gatsby-image 查询全尺寸图像?
- google-chrome - Google Chrome 浏览器中的奇怪弹出窗口
- blockchain - 无法访问反应组件中的 web3 和合同道具
- android - 除了构建类型之外,动态配置 URL 是一种常见的做法吗?
- reactjs - 如何使用预签名 URL 从 React 将文件上传到 AWS S3
- git - 如何在我的 IDE 中获取代码以反映其他人接受的拉取请求
- hex - 计算机以 32 位为一组表示信息。可以用多少个不同的整数表示:a) 十六进制 b) 8 位 ASCII
- spring-boot - JdbcTemplate BatchUpdate 不适用于 Springboot 中带有参数的子查询
- c# - C# 将新窗口重定向到 EasyTabs