【问题标题】:fill a numpy 2D array with function in one line在一行中用函数填充一个 numpy 二维数组
【发布时间】:2019-08-14 19:05:19
【问题描述】:

我想根据一个操作有效地填充一个二维 numpy 数组

我想在一行中执行以下操作

1DArray = ['A','B','C','D']
N = len(1DArray)
2DArray = np.zeros((N,N))
for i in range(N):
    for j in range (i, N):
        2DArray[i,j] = function(1DArray[i], 1DArray[j])

【问题讨论】:

  • 如果function 仅适用于单个值,那么您最好这样做。必须为每个 ij 对调用一次。
  • 你知道function(..)吗?
  • 为什么ji开始?
  • 我没有注意到(i,N)。有一组 numpy 函数可以索引或选择上三角或下三角,np.tri... 但如果您可以使用某种outer 计算编写function,它可能会比这种迭代更快,即使它填充了整个数组
  • 只有当function 可以被向量化时,向量化才是可能的。我在this post 的回答可能对你有帮助。

标签: python numpy


【解决方案1】:
2DArray = [[0 for _ in range(i)] + [function(1DArray[i], 1DArray[j]) for j in range(i,N)] for i in range (N)]

[0 for _ in range(i)] 将 0 添加到从不受影响的位置。您可以删除它以获取长度为 N-j

的列表

【讨论】:

  • 从技术上讲,这是一个单一的班轮,但我怀疑 OP 也想要更快的东西。
【解决方案2】:

你可以使用numpy.triu_indices

import numpy as np

i=np.triu_indices(N)
2DArray[i]=[function(1DArray[x],1DArray[y]) for x,y in zip(i[0],i[1])]

【讨论】:

    猜你喜欢
    • 2015-01-24
    • 2012-03-08
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多