列表推导在Python Shell中运行良好,但在运行脚本时将被忽略

弃权

我有以下d numpy数组:

array([[0, 1, 4, 9, 4, 1, 0, 1, 4],
       [1, 0, 1, 4, 1, 0, 1, 0, 1],
       [1, 0, 1, 4, 1, 0, 1, 0, 1],
       [4, 1, 0, 1, 0, 1, 4, 1, 0],
       [4, 1, 0, 1, 0, 1, 4, 1, 0],
       [9, 4, 1, 0, 1, 4, 9, 4, 1],
       [1, 0, 1, 4, 1, 0, 1, 0, 1],
       [0, 1, 4, 9, 4, 1, 0, 1, 4]])

我需要D使用动态时间规整算法填充另一个2d数组(),该算法需要先填充第一行和第一列,然后再填充数组的其余部分。

为此,我有一个DTWdistance(d)函数,该函数接收d上面数组作为计算和返回新D数组的参数。

我打算在for循环上使用列表推导,但是当循环按预期工作时,在运行脚本时,列表推导被完全忽略了。但是,当它们在Python Shell中运行时,它们可以很好地工作,因此可以丢弃任何语法错误。

由于将忽略列表的理解,因此D永远不会计算数组,并且该函数将返回相同的d数组而没有任何更改。

例如:

D[0,1:] = [d[0,i] + D[0, i-1] for i in range(1, m)]

这应该填充的第一行D阵列(从开始i=1使用以下值): [1, 5, 14, 18, 19, 19, 20, 24]

但是,让该列表理解第一行并for在其余过程中循环,它会产生D具有正确值数组,除了第一行不会改变任何内容,而不是将上面的列表分配给该数组切片,它只是从d数组的相应切片中分配那些值[1, 4, 9, 4, 1, 0, 1, 4]

结果,通过使用列表推导来计算整个D数组,我得到的只是同一个d数组。

我很清楚那里存在几种面向DTW的工具,但这是我自己的实现,可以满足一组特定的个人需求。

我将对以下原因进行解释,这些解释为何会忽略列表推导,如果我做错了什么,或者这可能是个错误,以及如何克服它。

我在Windows 8上使用Python 3.4 x64和Spyder IDE 2.3.5.2。


TL; DR:

尝试使用列表推导而不是循环来计算多个列表,并将其分配给2d数组的特定切片。它们在Python Shell中可以正常工作,但是如果在脚本中运行则将被忽略。我不知道为什么。


根据要求,MCVE:

import numpy as np

def ldistance(x, y):
    m = len(x)
    n = len(y)

    # Euclidean distance
    d = np.array([[(x[j]-y[i])**2 for j in range(m)] for i in range(n)],
             dtype=float)
    return d

def cdistance(d):
    n, m = d.shape
    D = np.zeros((n, m))

    # First element is identical in both matrices.
    D[0, 0] = d[0, 0]
    # Elements in first row [0, 1:]
    D[0, 1:] = [d[0, j] + D[0, j-1] for j in range(1, m)]
    # Elements in first column [1:, 0]
    D[1:, 0] = [d[i, 0] + D[i-1, 0] for i in range(1, n)]
    # Rest of the elements in the matrix [1:, 1:]
    D[1:, 1:] = [[d[i, j] + min(D[i-1, j-1], D[i-1, j], D[i, j-1])
                 for j in range(1, m)]
                 for i in range(1, n)]
    return D

# --

x = [0, 1, 2, 3, 2, 1, 0, 1, 2]
y = [0, 1, 1, 2, 2, 3, 1, 0]

d = ldistance(x, y)
D = cdistance(d)
布宜诺斯艾利斯

这里的错误部分是您无法做这种事情:

D[0, 1:] = [d[0, j] + D[0, j-1] for j in range(1, m)]

如您所见,您正在尝试在D上使用元素,该元素将在此内部循环本身(D[0, j-1]部分)中计算。D[0, 1:]仅在对整个列表表达式求值并将结果列表分配给-so之后才计算D[0: 1:],但是对于j == 1您已分配位置的值D[0, 0],所有其余值D[0, j-1]均为0。

如果您偶然地在交互模式下进行了此操作,那可能仅是因为您之前用有意义的值填充了D。

for在这种情况下,可以执行外部循环,因为在根据该值计算值时,已经分配了D项目的先前所需值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

haskell在python列表推导中的“位置”

来自分类Dev

列表推导中的Python哈希函数

来自分类Dev

使用列表推导从python中的列表中删除列表?

来自分类Dev

使用列表推导删除列表中的元素(Python)

来自分类Dev

使用列表推导删除列表中的元素-Python

来自分类Dev

Python推导出列表列表中的最佳数字

来自分类Dev

Python如何处理列表推导中的多个条件?

来自分类Dev

如何在python中以什么顺序评估列表推导

来自分类Dev

嵌套列表推导如何在python中工作?

来自分类Dev

列表推导中的嵌套循环和条件检查(python)

来自分类Dev

清除python列表推导中缺少值的解决方案

来自分类Dev

嵌套列表推导如何在python中工作?

来自分类Dev

列表推导式 Python 中的 Lambda 表达式

来自分类Dev

使用 Python 3.6 中的列表推导将列表附加到列表列表

来自分类Dev

使用Python中的嵌套列表推导从列表中过滤出项目

来自分类Dev

Python中的列表推导,可计算列表的最小值和最大值

来自分类Dev

使用列表推导在Python中设置唯一词典的列表

来自分类Dev

如何使用python中的列表推导计算列表中元素的出现次数?

来自分类Dev

使用列表推导从嵌套的Python数据结构中获取值列表?

来自分类Dev

在Python中运行脚本时如何操纵图形?

来自分类Dev

列表推导中的Haskell懒惰

来自分类Dev

Julia中的嵌套列表推导

来自分类Dev

列表推导中的where子句

来自分类Dev

Haskell:列表推导中的函数

来自分类Dev

Haskell 中的列表推导式

来自分类Dev

运行脚本时出现Python KeyError

来自分类Dev

运行脚本时出现Python KeyError

来自分类Dev

使用列表推导在Python 2.7中使用with语句进行多重处理

来自分类Dev

Python列表推导:将数组中的所有元素设置为0或1

Related 相关文章

  1. 1

    haskell在python列表推导中的“位置”

  2. 2

    列表推导中的Python哈希函数

  3. 3

    使用列表推导从python中的列表中删除列表?

  4. 4

    使用列表推导删除列表中的元素(Python)

  5. 5

    使用列表推导删除列表中的元素-Python

  6. 6

    Python推导出列表列表中的最佳数字

  7. 7

    Python如何处理列表推导中的多个条件?

  8. 8

    如何在python中以什么顺序评估列表推导

  9. 9

    嵌套列表推导如何在python中工作?

  10. 10

    列表推导中的嵌套循环和条件检查(python)

  11. 11

    清除python列表推导中缺少值的解决方案

  12. 12

    嵌套列表推导如何在python中工作?

  13. 13

    列表推导式 Python 中的 Lambda 表达式

  14. 14

    使用 Python 3.6 中的列表推导将列表附加到列表列表

  15. 15

    使用Python中的嵌套列表推导从列表中过滤出项目

  16. 16

    Python中的列表推导,可计算列表的最小值和最大值

  17. 17

    使用列表推导在Python中设置唯一词典的列表

  18. 18

    如何使用python中的列表推导计算列表中元素的出现次数?

  19. 19

    使用列表推导从嵌套的Python数据结构中获取值列表?

  20. 20

    在Python中运行脚本时如何操纵图形?

  21. 21

    列表推导中的Haskell懒惰

  22. 22

    Julia中的嵌套列表推导

  23. 23

    列表推导中的where子句

  24. 24

    Haskell:列表推导中的函数

  25. 25

    Haskell 中的列表推导式

  26. 26

    运行脚本时出现Python KeyError

  27. 27

    运行脚本时出现Python KeyError

  28. 28

    使用列表推导在Python 2.7中使用with语句进行多重处理

  29. 29

    Python列表推导:将数组中的所有元素设置为0或1

热门标签

归档