【问题标题】:Increment specific coordinates to a numpy array [duplicate]将特定坐标增加到numpy数组[重复]
【发布时间】:2016-01-02 11:07:57
【问题描述】:

我对 numpy 很陌生,我想使用 numpy 增加数组的特定位置(所以它更快)。

为了清楚,我有一个“信息”类数组中的坐标列表。

class info:
    def __init__(self, timestamp, position):
        self.timestamp = timestamp
        self.position = position

目前我这样做:

for data in datas:
    x = data.position[0]
    y = data.position[1]

    self.heatmap[x][y] += 1

“热图”也是一个大小为宽高的numpy数组。

我想知道是否有更“numpy”的方式来做到这一点。

编辑:对不起,我正在寻找的是世界“指数”。答案就在那里:Increment given indices in a matrix

【问题讨论】:

  • 附注。 “数据”是一个复数词。它的单数形式是“基准”。所以,for data in datas 应该是 for datum in data
  • 所有这些中的 numpy 数组在哪里? heatmap 是什么?
  • 抱歉,热图是 np.zeros((width, height))。
  • 这不是 那个特定的问题的重复。我认为问题不在于增加指数。问题是关于在给定的一组索引处增加数组的值(基于问题中给出的示例),并基于短语“增加数组的特定位置”。
  • 嗯,你是对的,但他们在另一个问题中的做法是我想做的。事情是我正在寻找一种快速的方法来做到这一点(以便在 C 中执行 for 循环)

标签: python arrays numpy


【解决方案1】:

例如,你可以使用这样的东西吗?

import numpy as np
a = np.arange(16).reshape(4,4)
b = [0,0]
c = (1,1)
d = (np.array([2]),np.array([2]))
e = ([3],[3])
a[b] = 100  # b isn't a tuple so it doesn't work the way the others do
a[c] = 200
a[d] = 300
a[e] = 400
print a

[[100 100 100 100]
 [  4 200   6   7]
 [  8   9 300  11]
 [ 12  13  14 400]]

所以你可以考虑

self.heatmap[tuple(data.position)] += 1

【讨论】:

  • 但它会优化它吗?从某种意义上说,这个计算是用 C 而不是 Python 完成的? (谈论for循环)
  • 刚刚做了一些性能测试,但它不起作用。
  • 您要求“一种更麻木的方式”。在某些条件下,Numpy 可以 比纯 python 更快,因为是的,它可以让您调用用 C 编写的例程。但对于小型数组,它通常根本不快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 2016-02-27
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
相关资源
最近更新 更多