可以使用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
,一些将大于此
答案 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