【问题标题】:Slicing numpy array taking every nth element切片numpy数组取每n个元素
【发布时间】:2020-07-07 11:08:03
【问题描述】:

我有一个形状为 24576x25 的 numpy 数组,我想从中提取 3 个数组。第一个数组包含每个 1st,4th,7th,10th,... 元素 而第二个数组包含2nd,5,8,11th,... 元素,第三个数组包含3rd,6,9,12th,... 输出数组大小将为 8192x25。 我在 MATLAB

中执行以下操作
c = reshape(a,1,[]);
x = c(:,1:3:end);
y = c(:,2:3:end);
z = c(:,3:3:end);

我在 python 中尝试过a[:,0::3],但这仅在我的形状数组可被 3 整除时才有效。我能做什么?

X,Y = np.mgrid[0:24576:1, 0:25:1]
a = X[:,::,3]
b = X[:,1::3]
c = X[:,2::3]

也不起作用。我需要 a,b,c.shape = 8192x25

【问题讨论】:

  • a[:, ::3] 应该没问题。 anumpy.ndarray 吗?
  • @paime 不起作用,是的,它是一个 ndarray
  • 我需要 x.shape 、 y.shape 和 z.shape = 8192x25
  • 如果你需要8192x25,那么它是a[0::3]。 @bigbounty 的回答绝对有效。
  • 它给了我相同的大小,但元素选择是错误的..因为它应该返回 0,3,6,9,,... 但它给了我 0 1 2 3,...

标签: python arrays numpy slice


【解决方案1】:
import numpy as np
a = np.arange(24576*25).reshape((24576,25))
a[::3]

a[::3].shape 给你(8192, 25)

【讨论】:

  • 我做了同样的事情,没有返回 8192x25 x3
  • 这给了我 (8192,25) 但不是正确的元素,因为它应该给 0,3,6,.. 但我没有得到它
  • @AR。当您浏览 a[::3] 的元素时 - 它会给您 0,3,6
【解决方案2】:

对您最初的尝试进行简单的调整应该会产生您想要的结果:

X,Y = np.mgrid[0:24576:1, 0:25:1]
a = X[0::3,:]
b = X[1::3,:]
c = X[2::3,:]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2021-10-23
    • 2011-07-08
    • 2013-04-04
    • 2014-02-03
    相关资源
    最近更新 更多