我已经有了一个维度为 d 的行向量 a,它只包含元素 0 或 1。
我想生成一个 r × d 矩阵 A,其中 A 满足
for column j = 1,2 .... d
if a[j] = 1, then A[:,j] = 1. That's, the corresponding column will be all 1's
if a[j] = 0, then A[:,j] = 0. ....
我认为它看起来非常简单。但我不知道如何在 python (或其他语言)中有效地生成它。
请注意,r = 1,000 且 d = 100,000
(我想要生成这个矩阵 A 的原因是,给定另一个 d × n 矩阵 B,C = A*B 将是 r × n,其中 C 的行对应于向量 a 中的非零元素。 )
最佳答案
如果您要在 Python 中进行矩阵乘法或一般数学运算,请使用 NumPy .
A
的行都具有相同的值,因此计算它的有效方法是仅构建一行。您已经拥有该行 a
。
NumPy 还可以广播数组的值,使一维向量就像具有重复值的二维数组一样。这是节省内存的,因为您不需要实际为重复值分配空间。
因此,在 NumPy 中您可以执行如下计算:
import numpy as np
r, d, n = 1000, 100000, 1000
a = np.random.randint(2, size=d)
A = a
print(A.shape)
# (100000,)
B = np.random.random((d, n))
print(B.shape)
# (100000, 1000)
C = A.dot(B)
print(C.shape)
# (1000,)
结果,C
是“形状 (n,)
”——这是 n
的一维向量的 NumPy-talk elements——而不是形状为 (r,n)
的数组,因为就像 A
一样,所有行都具有相同的值。无需重复。
关于python - 如何在Python中高效地生成这个矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16716080/