从2D numpy数组快速计算随机的3D numpy数组

尼克斯

我有一个二维整数数组,我们称它为“ A”。

我想创建一个全为1和0的3维数组“ B”,以便:

  • 对于任何固定的(I,J) sum(B[i,j,:])==A[i.j]即,B[i,j,:]包含A[i,j] 1s在它
  • 1随机放置在第3维中。

我知道我将如何使用标准的python索引来执行此操作,但是结果却很慢。

我正在寻找一种方法来利用可以使Numpy快速运行的功能。

这是我使用标准索引的方法:

B=np.zeros((X,Y,Z))
indexoptions=range(Z)

for i in xrange(Y):
    for j in xrange(X):
        replacedindices=np.random.choice(indexoptions,size=A[i,j],replace=False)
        B[i,j,[replacedindices]]=1

有人可以解释一下我如何更快地做到这一点吗?

编辑:这是一个示例“ A”:

A=np.array([[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]])

在这种情况下X = Y = 5和Z> = 5

沃伦·韦克瑟

本质上与@JohnZwinck和@DSM相同,但具有shuffle用于改编给定轴功能:

import numpy as np

def shuffle(a, axis=-1):
    """
    Shuffle `a` in-place along the given axis.

    Apply numpy.random.shuffle to the given axis of `a`.
    Each one-dimensional slice is shuffled independently.
    """
    b = a.swapaxes(axis,-1)
    # Shuffle `b` in-place along the last axis.  `b` is a view of `a`,
    # so `a` is shuffled in place, too.
    shp = b.shape[:-1]
    for ndx in np.ndindex(shp):
        np.random.shuffle(b[ndx])
    return


def random_bits(a, n):
    b = (a[..., np.newaxis] > np.arange(n)).astype(int)
    shuffle(b)
    return b


if __name__ == "__main__":
    np.random.seed(12345)

    A = np.random.randint(0, 5, size=(3,4))
    Z = 6

    B = random_bits(A, Z)

    print "A:"
    print A
    print "B:"
    print B

输出:

A:
[[2 1 4 1]
 [2 1 1 3]
 [1 3 0 2]]
B:
[[[1 0 0 0 0 1]
  [0 1 0 0 0 0]
  [0 1 1 1 1 0]
  [0 0 0 1 0 0]]

 [[0 1 0 1 0 0]
  [0 0 0 1 0 0]
  [0 0 1 0 0 0]
  [1 0 1 0 1 0]]

 [[0 0 0 0 0 1]
  [0 0 1 1 1 0]
  [0 0 0 0 0 0]
  [0 0 1 0 1 0]]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 3D numpy 数组中提取 2D

来自分类Dev

计算3D锯齿状NumPy数组的2D平均值

来自分类Dev

2d与3d numpy数组的总积加上标量计算

来自分类Dev

计算3D锯齿状NumPy数组的2D平均值

来自分类Dev

将2d numpy数组连接到3d numpy数组

来自分类Dev

如何将2d numpy数组列表连接到3d numpy数组?

来自分类Dev

将多个 2d numpy 数组放入 3d numpy 数组

来自分类Dev

使用numpy使用2D数组的值更改3D数组中的子数组

来自分类Dev

如何将2D numpy数组与3D数组矩阵相乘以得到3D数组?

来自分类Dev

如何计算3d numpy数组的协方差矩阵?

来自分类Dev

3D矩阵内部数组的Numpy计算点积

来自分类Dev

将2D数组复制到3D数组-Python / NumPy

来自分类Dev

如何在3D Numpy数组中查找2D数组的行

来自分类Dev

如何用numpy对3D数组的内部2d数组进行排序?

来自分类Dev

用2d数组索引3d numpy数组

来自分类Dev

用numpy中的3d数组索引2d数组

来自分类Dev

从基本2D数组构造3D数组-Numpy

来自分类Dev

从numpy中的3d数组中删除2d子数组

来自分类Dev

Numpy对2D数组进行操作以生成3D数组

来自分类Dev

将 3D Numpy 数组重塑为 2D 数组

来自分类Dev

通过乘以numpy中的向量将2D数组转换为3D数组

来自分类Dev

Python:从 3d numpy 数组中的 2d 数组访问保存的点

来自分类Dev

将 2D 数组转换为 3D numpy 数组

来自分类Dev

Numpy计算随机2D或1D数组中的Min Max

来自分类Dev

根据分布随机地重新放置numpy数组的选定元素?(将2D数组的维数扩展为3D,并使用随机数)

来自分类Dev

Numpy 2D数组到表格

来自分类Dev

更新2D numpy数组值

来自分类Dev

Python 2D NumPy数组理解

来自分类Dev

遮罩2D Numpy数组

Related 相关文章

热门标签

归档