首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >任意轴上未知维数numpy阵列的级联

任意轴上未知维数numpy阵列的级联
EN

Stack Overflow用户
提问于 2013-10-28 13:47:31
回答 3查看 2.3K关注 0票数 12

我有两个未知维度的数组AB,我想沿着N第th维连接它们。例如:

代码语言:javascript
运行
复制
>>> A = rand(2,2)       # just for illustration, dimensions should be unknown
>>> B = rand(2,2)       # idem
>>> N = 5

>>> C = concatenate((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 2

>>> C = stack((A, B), axis=N)
numpy.core._internal.AxisError: axis 5 is out of bounds for array of dimension 3

这里提出了一个相关的问题。不幸的是,当维度未知时,建议的解决方案不能工作,我们可能需要添加几个新的轴,直到得到N的最小维数。

我所做的就是用1来扩展这个形状,直到N第四维,然后连接:

代码语言:javascript
运行
复制
newshapeA = A.shape + (1,) * (N + 1 - A.ndim)
newshapeB = B.shape + (1,) * (N + 1 - B.ndim)
concatenate((A.reshape(newshapeA), B.reshape(newshapeB)), axis=N)

例如,使用此代码,我应该能够将(2,2,1, 3 )数组与(2,2)数组沿轴3连接起来。

是否有更好的方法来实现这一点?

ps:按建议更新第一个答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-28 15:51:11

我不认为您的方法有什么问题,尽管您可以使代码更加紧凑:

代码语言:javascript
运行
复制
newshapeA = A.shape + (1,) * (N + 1 - A.ndim)
票数 1
EN

Stack Overflow用户

发布于 2017-05-09 13:45:57

这应该是可行的:

代码语言:javascript
运行
复制
def atleast_nd(x, n):
    return np.array(x, ndmin=n, subok=True, copy=False)

np.concatenate((atleast_nd(a, N+1), atleast_nd(b, N+1)), axis=N)
票数 2
EN

Stack Overflow用户

发布于 2013-10-28 15:23:53

另一种选择,使用迪姆斯

代码语言:javascript
运行
复制
>>> import numpy as np
>>> A = np.random.rand(2,2)
>>> B = np.random.rand(2,2)
>>> N=5


>>> while A.ndim < N:
        A= np.expand_dims(A,x)
>>> while B.ndim < N:
        B= np.expand_dims(B,x)
>>> np.concatenate((A,B),axis=N-1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19636487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档