【发布时间】:2021-08-19 18:59:49
【问题描述】:
x = array([0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ])
nbd = array([array([1], dtype=int64), array([0, 2], dtype=int64), array([1, 3], dtype=int64),
array([2, 4], dtype=int64), array([3, 5], dtype=int64), array([4, 6], dtype=int64),
array([5, 7], dtype=int64), array([6, 8], dtype=int64), array([7, 9], dtype=int64),
array([ 8, 10], dtype=int64), array([9], dtype=int64)], dtype=object)
nbd 是具有 x 索引的数组数组。
我正在寻找数组“x_nbd”的数组,以便它在 nbd 索引处保存 x 值。
即,
x_nbd = array([array([0.5]), array([0., 1.]), array([0.5, 1.5]), array([1., 2.]),
array([1.5, 2.5]), array([2., 3.]), array([2.5, 3.5]),
array([3., 4.]), array([3.5, 4.5]), array([4., 5.]), array([4.5])],
dtype=object)
我试过 x_nbd = x[nbd] 但没有运气。我找到了一种方法,但是对于大数据来说它非常慢,因为它通过循环运行每个元素。那是
x_nbd = np.array([np.array(x[e]) for e in nbd]).
此外,它显示“VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (这是一个列表或元组的列表或元组或具有不同长度或形状的 ndarray) 已被弃用。如果你打算这样做这个,你必须在创建 ndarray 时指定 'dtype=object'。"
有没有更快的方法在 python 中得到这个?或如何在 python 中使用 numpy 实际实现这一点?
【问题讨论】:
-
这就是你必须做的。
nbd是具有不同形状的数组的 list,结果也是一个(或 object dtype 数组,实际上是相同的)。请记住,numpy在处理具有数字 dtype 的多维数组时处于最佳状态。 -
你打算以后用那个参差不齐的数组做什么?也许您应该坚持使用列表,而不使用数组包装器。
-
@hpaulj 我认为数组或列表没有太大区别。此外,当我使用: x_nbd = np.array([np.array(x[e]) for e in nbd]) 时,如何避免该弃用警告?
-
我可以引用警告吗? “如果您打算这样做,则必须在创建 ndarray 时指定 'dtype=object'。”
标签: python arrays numpy multidimensional-array