python - 如何在 python 中向量化一组项目

标签 python arrays matrix vectorization

我正在尝试获取一组数组并将它们转换成一个矩阵,该矩阵本质上是一组项目的指示矩阵。

我目前有一个包含 N 项的数组

A_ = [A,B,C,D,E,...,Y,Z] 

此外,我有 S 个数组(当前存储在一个数组中),它们包含向量 A 中的项目的子集。

B_ = [A,B,C,Z]
C_ = [A,B]
D_ = [D,Y,Z]

它们存储的数组是这样的结构:

X = [B_,C_,D_]

我想将数据转换成指标矩阵以便于操作。理想情况下它看起来像这样(它将是一个 N x S 大小的矩阵):

[1,1,1,0,...,0,1]
[1,1,0,0,...,0,0]
[0,0,0,1,...,1,1]

我知道如何使用 for 循环遍历它并创建矩阵,但我想知道是否有更有效/语法更简单的方法来处理这个问题。

最佳答案

一个简洁的方法是使用 list comprehension.

# Create a list containing the alphabet using a list comprehension
A_ = [chr(i) for i in range(65,91)]

# A list containing two sub-lists with some letters
M = [["A","B","C","Z"],["A","B","G"]]

# Nested list comprehension to convert character matrix 
# into matrix of indicator vectors
I_M = [[1 if char in sublist else 0 for char in A_] for sublist in M]

如果您不熟悉推导式,那么最后一行有点密集,但是一旦您将其拆开,它就不会太棘手。内部...

[1 if char in sublist else 0 for char in A_]

本身就是一个列表推导式,它为 A_ 中的所有字符 (char) 创建一个包含 1 的列表,它也在 sublist 中找到>,对于 sublist 中未找到的字符,则为 0。

外位...

[ ... for sublist in M]

简单地为在 M 中找到的每个 sublist 运行内部列表推导,产生由存储在 I_M 中的内部列表推导创建的所有子列表的列表

编辑:

虽然我试图让这个示例保持简单,但值得注意(正如 DSM 和 jterrace 指出的那样)testing membership in vanilla arrays is O(N) .将其转换为类似于 Set 的散列结构会加快检查大型子列表的速度。

关于python - 如何在 python 中向量化一组项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21199952/

相关文章:

JavaScript - 对数组

python - 如何创建具有特定重复模式 1 和 0 的二进制矩阵?

c++ - 较大矩阵的子矩阵之和

python - 两层神经网络 Tensorflow python

python - 制作正确的 ANN 进行预测

python - 如何在不触发SettingWithCopyWarning的情况下将新列分配给DataFrame

python - python中使用statsmodels错误的逻辑回归

python - "WindowsError: Access is denied"调用 Process.terminate

c++ - 如何将文件中的字符串和整数放入多维数组?

java - 如何在 Java 中对字符串数组(以名称与数字连接的形式)进行排序?