python - 如何将状态表映射到numpy中的生命表?

标签 python numpy array-broadcasting elementwise-operations

问题和我的期望。

我有一个表h,它指示氢键状态,其中1表示现有氢键,0表示没有氢键债券存在。列代表不同的对象,行代表不同的时间步长。

0, 0, 1, 1, 0, 0
0, 0, 1, 1, 0, 0
1, 0, 1, 1, 0, 0
1, 1, 1, 1, 0, 1
0, 1, 0, 0, 1, 1
0, 1, 0, 0, 1, 1
1, 0, 1, 1, 0, 1

我想计算每个物体的生命周期(氢键存在的时间)。所以预期生命周期表L应该是这样的。

0, 0, 4, 4, 0, 0
0, 0, 4, 4, 0, 0 
2, 0, 4, 4, 0, 0 
2, 3, 4, 4, 0, 4
0, 3, 0, 0, 2, 4
0, 3, 0, 0, 2, 4
1, 0, 1, 1, 0, 4

我不知道如何应用此 map 。

我做了什么。

我尝试将h映射到一个新表generations,使用上升沿检测来指示H键的代数。得到的世代表G:

 [[0 0 1 1 0 0]
 [0 0 1 1 0 0]
 [1 0 1 1 0 0]
 [1 1 1 1 0 1]
 [1 1 1 1 1 1]
 [1 1 1 1 1 1]
 [2 1 2 2 1 1]]

然后我尝试将 h 映射到新的 ages 表,指示氢键的年龄。我得到了下表A

 [[0 0 1 1 0 0]
 [0 0 2 2 0 0]
 [1 0 3 3 0 0]
 [2 1 4 4 0 1]
 [0 2 0 0 1 2]
 [0 3 0 0 2 3]
 [1 0 1 1 0 4]]

我尝试使用以下逻辑将 h 映射到生命表 L: H键的生命周期是同一代所有年龄中的最大年龄。然而,我一直坚持这个映射。

一些代码

我用来计算GA的一些代码。

    def getQbGenerations(self, QbStates):
        QbGenerations = np.zeros_like(QbStates, dtype=np.int64)
        Generation = np.zeros(QbStates.shape[-1])
        Generation[QbStates[0] == 1] = 1
        QbGenerations[0] = Generation
        for i in range(1, QbStates.shape[0]):
            # Rising Edge
            RiseMask = np.logical_and(QbStates[i-1]==0, QbStates[i]==1)
            Generation[RiseMask] += 1
            QbGenerations[i] = Generation
        return QbGenerations

    def getQbAges(self, QbStates):
        QbAges = np.zeros_like(QbStates, dtype=np.int64)
        Age = np.zeros(QbStates.shape[-1])
        Age[QbStates[0] == 1] = 1
        QbAges[0] = Age
        for i in range(1, QbStates.shape[0]):
            BondMask = QbStates[i] == 1
            Age[BondMask] += 1
            Age[~BondMask] = 0
            QbAges[i] = Age
        return QbAges

最佳答案

我会做一些更简单的事情,尽管不是最“Pythonic”的解决方案。我会使用以下算法:

  1. 取每一列

  2. 循环遍历列,直到达到非零条目

  3. 记录非零条目的“连续”时间

  4. 将此添加到列表

  5. 重新循环该列

  6. 识别第一个条纹

  7. 将第一个条纹中的值更改为上面列表中的第一个条目。

关于python - 如何将状态表映射到numpy中的生命表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62858920/

相关文章:

python - 为什么 pip 不更新我的 numpy 和 scipy?

python - 向量和 pandas 列(线性向量)之间的余弦相似度

python - 创建一个类,通过读取多个 CSV 文件创建字典 - Python

python - 为什么我的脚本不能正确打印 Unicode 字符?

Python乘以等长的元组

python - 在两个 numpy 形状对象数组上应用成对形状函数

python - 带递归的循环变量

python - PIL : fromarray gives a wrong object in P mode

python - numpy 广播 bool 索引

numpy - 包含 nan 的数组行的平均值直到 25%