Numpy 快速填充 3D 矩阵

时间:2021-03-18 11:08:59

标签: python numpy matrix

可以使用numpy函数加速以下代码

def fill3D(x,y,z,n):
    M = np.zeros((n,n,n))
    for i,j,k in zip(x,y,z):
        M[i,j,k] += 1
    return M

此处 x,y,z 是矩阵 M 的相应维度的索引列表

索引三元组 (i,j,k) 是非唯一的。一些矩阵条目将保持在 0,一些将是 1,一些将大于此

1 个答案:

答案 0 :(得分:2)

一种解决方案可能是使用 np.unique() 来计算重复索引的数量,然后分配值:

import numpy as np

# Dummy index, with duplicate entries
x = np.array([1, 0, 0])
y = np.array([0, 1, 1])
z = np.array([2, 2, 2])

# Empty 3x3x3 matrix
M = np.zeros((3,3,3))

# Count and assign the new values:
ind,val = np.unique(np.vstack((x,y,z)),return_counts=True,axis=1)
M[ind[0],ind[1],ind[2]] = val