【发布时间】:2019-08-06 23:03:27
【问题描述】:
- 获取一个非常大的列表,由于各种原因,它和所有其他的都无法放入可用内存中,这里:
A = [ 2, -3, 10, 0.2] - 映射其组件的符号:sign_A =
list(map(lambda u: (abs(u)==u), A))
你得到[True, False, True, True] - 在需要操作
abs_A = [abs(e) for e in A]的地方做一些逻辑。所以你刷新A并继续使用sign_A和abs_A。该逻辑产生组件的感兴趣索引,例如i、k、...对于列表abs_A。
我遇到的问题是当使用三元运算符(falsevalue, truevalue)[condition] 对 A 的 signed 分量进行一些代数时,例如:
abs_A[i]*(-1, 1)[sign_A[i]] + abs_A[k]**(-1, 1)[sign_A[k]]
# equivalently, can use:
# abs_A[i]*(-1, 1)[np.bool(sign_A[i])] + abs_A[k]**(-1, 1)[np.bool(sign_A[k])]
我收到此警告:
DeprecationWarning:将来,'np.bool_' 将是一个错误 标量被解释为索引。
警告间接告诉我,可能有比我的 sn-p 更好、更“pythonesque”的方式来执行此操作。我找到了相关的帖子(例如here 和here),但没有关于我应该如何处理它的建议。有人指点吗?
【问题讨论】:
-
只需将
np.bool()替换为int():abs_A[i]*(-1, 1)[int(sign_A[i])]+... -
A看起来像一个列表,而不是一个数组。 -
@DYZ:我刚刚在 stackoverflow.com/questions/26282266/… 上阅读 Jaime 的评论,建议相同。发送。
-
sign_A的元素已经是布尔值;它们在索引 (-1,1) 之类的元组时起作用。 -
@hpaulj:确实如此,而且确实如此。但是,当使用它们以黑色显示(在 sn-p 中)时,我得到与将它们与内置
bool或np_bool一起使用时相同的错误。我是 Python 的新手,这让我很失望。
标签: python-3.x numpy boolean