python - 如何在Python中高效地生成这个矩阵

标签 python numpy matrix

我已经有了一个维度为 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/

相关文章:

python - 在字典中添加相同键的值

python - 1064, “You have an error in your SQL syntax” 插入 MySql

python - 决策树分类器我不断收到 NaN 错误

python - 使用 scipy 插值闭合曲线

r - 如何简化这个程序?

Python 类中的公共(public)方法?

python - 修改 setattr 以将多个属性批量分配给不同的值

python - 如何继承 numpy.ndarray 的子类

matlab - 在 MATLAB 中找到矩阵中每一列的非零元素行中的最低位置

python - 如何构建一个 N*(N+1) 矩阵,其数量在 1~N*N 范围内且完全分布?