python不连续切片_python-使3-d numpy数组的每个第n个切片连续

声明

假设我们有一些3维的numpy数组A,其形状为(X,Y,Z).我想创建一个新的数组B,它也将具有形状(X,Y,Z).

我们希望沿着第零轴的B的前n个切片(:n)对应于沿着第零轴的A的第m个切片(:: m).

我们还希望B的切片n:2 * n对应于A的每m个第1个切片(1 :: m).对于数组的其余部分,依此类推.

使用矢量化的numpy计算实现此目标的最佳方法是什么?

通过一个示例可以最好地理解上述陈述.因此,让我们开始设置一些示例数组A:

import numpy as np

# Create array A with shape (15, 3, 3)

n = 3; m = 5

a = np.array([i * np.eye(3) for i in range(1, 1+m)])

A = np.tile(a, (n, 1, 1))

如果我们看一下A的第零个切片,我们会得到:

print(A[0])

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

print(A[1])

[[2. 0. 0.]

[0. 2. 0.]

[0. 0. 2.]]

print(A[4])

[[5. 0. 0.]

[0. 5. 0.]

[0. 0. 5.]]

print(A[5])

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

等等.

A中的值并不重要,但应有助于说明原始语句.

我想知道我们是否只能使用numpy函数创建矩阵B.数组B应该有切片:

print(B[0])

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

print(B[1])

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

print(B[2])

[[1. 0. 0.]

[0. 1. 0.]

[0. 0. 1.]]

print(B[3])

[[2. 0. 0.]

[0. 2. 0.]

[0. 0. 2.]]

等等.

有什么方法可以用纯粹的numpy解决方案从A生成B?

我尝试过的

以下给出所需的B,但是随着m变大,它变得很乏味:

# vstack solution

B = np.vstack((A[::m], A[1::m], A[2::m], A[3::m], A[4::m]))

使用列表理解也可以,但是我想避免使用循环:

# List comprehension solution

B = np.vstack([A[i::m] for i in range(m)])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值