【问题标题】:creating matrix, which reflex properties of a given one with numpy创建矩阵,用 numpy 反射给定矩阵的属性
【发布时间】:2020-11-26 22:28:37
【问题描述】:

当给定一个包含从 0 到 K 的元素的 N x K 矩阵时,是否有一种高效的方式来创建以下矩阵:

       #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.zeros((N,I))
for n in range(N):
   for i in range(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

【问题讨论】:

  • 您能否包含一个带有两个 for 循环的示例,以便您的意图/规则清晰? N=3K=5 的预期结果是什么?

标签: python numpy matrix


【解决方案1】:

我想你正在寻找np.bincount。它很快,但不幸的是只适用于一维。所以需要一个循环:

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]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2014-06-20
    • 2017-04-12
    • 2022-11-02
    • 2019-05-21
    • 1970-01-01
    • 2020-07-09
    相关资源
    最近更新 更多