【发布时间】:2017-06-09 22:15:41
【问题描述】:
是否有一种高效且 Python 的方法可以从 d 维数组中选择所有具有偶数索引的元素,而无需事先知道 d?以及所有剩余的(即所有至少有一个奇数索引的那些)?
第一个问题的最小示例
import numpy as np
a = np.array(range(27)).reshape((3,3,3))
a[::2,::2,::2]
# -> array([[[ 0, 2],
# [ 6, 8]],
# [[18, 20],
# [24, 26]]])
我为 d 维对象找到的唯一非 Pythonic 方式,d 是可变的 至少对于“全偶数”部分,“至少一个奇数”仍然无法理解。
d = 3
a = np.array(range(3**d)).reshape([3]*d)
b = a
for i in range(d):
b = np.take(b, np.array(range(0,b.shape[i],2)), axis=i)
我问这个(可能已经有更高级别的解决方案)的原因是我想在 n 步中迭代地创建一个大小为 (2**n+1, ..., 2**n+1) 的大型 d 维对象,在每一步复制偶数- 前面步骤中的索引元素,例如:
for n in range(N):
new_array = np.zeros([2**n+1]*d)
new_array[all_even] = old_array
new_array[at_least_one_odd] = #something else
提前感谢您的任何提示!
【问题讨论】:
标签: python arrays numpy indexing slice