有没有一种高效且符合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维对象(d是变量)的唯一非pythonic方法 至少对于“所有偶数”部分,但对于“至少有一个奇数”的部分仍然无法理解。
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)
我问这个问题的原因是,我想逐步创建一个大小为(2**n+1, ..., 2**n+1)
的大型d维对象,需要n步完成。每一步都从上一步中复制偶数索引元素,类似于:
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
感谢您提前提供的任何提示!