Python 创建矩阵,用numpy反射给定矩阵的属性
当给定一个元素从0到K的nxk矩阵时,是否有一种高效、优雅的方法来创建以下矩阵:Python 创建矩阵,用numpy反射给定矩阵的属性,python,numpy,matrix,Python,Numpy,Matrix,当给定一个元素从0到K的nxk矩阵时,是否有一种高效、优雅的方法来创建以下矩阵: #0 | #2 | ... | #K ------------------------- Row 1 x | y | ... | z ------------------------- Row 2 a | b | ... | d ------------------------- ... ------------------------- Row N g | h | ... | j
#0 | #2 | ... | #K
-------------------------
Row 1 x | y | ... | z
-------------------------
Row 2 a | b | ... | d
-------------------------
...
-------------------------
Row N g | h | ... | j
其中,在单元格1中,2应为第一行中的2s量
我知道,一个相当低效的方法是使用两个for循环来实现这一点,但我想知道是否也可以使用一些矩阵/NumPy操作来解决这个问题
干杯
编辑:
某些代码可能如下所示:
x_mod=np.zero((N,I))
对于范围内的n(n):
对于范围(i)中的i:
x_mod[n][int(x[n][i])]+=1
其中X是原始矩阵,X_mod是新矩阵
所以
X = 2 3 4 4 0
0 1 3 3 2
1 1 4 2 2
预期结果如下所示:
1 0 1 1 2
1 1 1 2 0
0 2 2 0 1
我想你在找
np.bincount
。它的速度很快,但不幸的是,它只能在1D工作。因此需要一个循环:
import numpy as np
rng = np.random.default_rng()
N,K = 5,6
in_ = rng.integers(0,K,(N,K))
in_
# array([[2, 4, 3, 5, 4, 1],
# [4, 5, 3, 5, 4, 5],
# [2, 2, 0, 3, 3, 3],
# [5, 5, 0, 4, 4, 5],
# [1, 1, 0, 2, 3, 2]])
out = np.array([np.bincount(i,None,K) for i in in_])
out
# array([[0, 1, 1, 1, 2, 1],
# [0, 0, 0, 1, 2, 3],
# [1, 0, 2, 3, 0, 0],
# [1, 0, 0, 0, 2, 3],
# [1, 2, 2, 1, 0, 0]])
您能否包含一个带有两个for循环的示例,以便您的意图/规则清晰明了?以及
N=3
,K=5
的期望结果?