【问题标题】:How to assign values to a numpy array as a function of index?如何将值分配给 numpy 数组作为索引的函数?
【发布时间】:2019-01-04 09:19:06
【问题描述】:

我只能找到使用坐标元组分配某些值的结果,例如this one

我想将值分配给二维数组作为其坐标的函数。最简单的情况是将每个元素的值设置为它们的第二个索引(例如 x 坐标)。这样,

x[0][0] = 0
x[1][0] = 0
...
x[2][0] = 0
x[0][1] = 1
x[0][2] = 2
...

更复杂的情况是将这些值设置为到某个点 (x, y) 的欧几里得距离。

我目前的解决方案是使用 for 循环,这绝对不是有效的。矢量化实现会很好。

我目前的实现:

x_mask = np.zeros((256, 256))
for i in range(256):
    for j in range(256):
        x_mask[i][j] = j

【问题讨论】:

  • 您的简单示例很简单。对于更复杂的情况,您应该自己尝试矢量化解决方案并告诉我们您遇到的问题。没有“通用方式”来矢量化操作。如果有,我们就不需要程序员了:)。
  • @jpp 期望每个位置都有一个 lambda 表达式。我想一旦我将 x/y 坐标作为辅助矩阵来计算很多其他东西,它的效果同样好。

标签: python arrays performance numpy multidimensional-array


【解决方案1】:

试试这个:

a=[]
for i in range(4):
    b=[]
    for j in range(4):
        b.append(j)
    a.append(b)

【讨论】:

  • ..我不想像声明的那样使用 for 循环。
【解决方案2】:

您可以分配一个范围并利用 NumPy broadcasting

A = np.zeros((256, 256))
A[:] = range(A.shape[1])
# or A[:] = np.arange(A.shape[1])

您选择的方法将取决于您希望应用的功能。

【讨论】:

  • 完美运行。一旦我有了 x/y 坐标,获得欧几里得/曼哈顿距离就会很容易,谢谢!
【解决方案3】:

numpy.mgrid 似乎是解决此问题的正确工具(尤其是如果您需要 x 和 y)。

从文档中复制的示例:

>>> np.mgrid[0:5,0:5]
array([[[0, 0, 0, 0, 0],
        [1, 1, 1, 1, 1],
        [2, 2, 2, 2, 2],
        [3, 3, 3, 3, 3],
        [4, 4, 4, 4, 4]],
       [[0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4],
        [0, 1, 2, 3, 4]]]) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 2013-08-28
    相关资源
    最近更新 更多