python - 在 Python 中创建 Numpy 数组而不进行迭代

标签 python arrays numpy

假设我有一个形状为 (2,3) 且填充有 float 的 numpy 数组。

我还需要一个包含 X 和 Y 值的所有可能组合的数组(它们在数组中的相应位置)。是否有类似简单函数的东西可以从 numpy 数组中获取索引作为元组,其中我不需要 for 循环遍历数组?

示例代码:

arr=np.array([np.array([1.0,1.1,1.2]),
              np.array([1.0,1.1,1.2])])
indices=np.zeros([arr.shape[0]*arr.shape[1]])

#I want an array of length 6 like np.array([[0,0],[0,1],[0,2],[1,0],[1,1], [1,2]])
#Code so far, iterates though :(
ik=0
for i in np.arange(array.shape[0]):
    for k in np.arange(array.shape[1]):
        indices[ik]=np.array([i,k])
        ik+=1

现在,在此之后,我还想创建一个包含“XYZ 坐标”的“索引”数组长度的数组,就像包含 XY“索引”和“arr”中的 Z 值的每个元素一样。有没有比这更简单的方法(如果可能的话,无需再次遍历数组):

xyz=np.zeros(indices.shape[0])
for i in range(indices.shape[0]):
    xyz=np.array([indices[i,0],indices[i,1],arr[indices[i,0],indices[i,1]]

最佳答案

您可以使用np.ndindex :

indices = np.ndindex(arr.shape)

这将给出一个迭代器而不是一个数组,但您可以轻松地将其转换为列表:

>>> list(indices)
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]

然后您可以将索引与原始数组沿第二维堆叠:

np.hstack((list(indices), arr.reshape((arr.size, 1))))

关于python - 在 Python 中创建 Numpy 数组而不进行迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30321380/

相关文章:

javascript - 无法在循环外访问数组元素

arrays - 以最小化序列重复为目标对数组进行排序

python - 类型 str 没有定义 __round__ 方法错误

python - 方程组求解器 pandas

python - 解析此 JSON 输出时我缺少什么

python - "UserWarning: Possibly corrupt EXIF data"对图像进行分类时

python - matplotlib:超过 2 个控制点的延长线

python - 如何使用正则表达式从python字符串中提取不同类型的子字符串?

创建二维 numpy 数组的 Pythonic 方式

python - 给 numpy 数组赋值