【问题标题】:concatenating tuples of array within a tuple在一个元组中连接数组的元组
【发布时间】:2017-09-08 04:02:58
【问题描述】:

我有一个包含许多元组的元组。我的主元组中的每个元组都有两个元素—— 第一个元素是一个形状为 (700,) 的数组,第二个元素是一个形状为 (700,) 的数组 元素是一个整数。

这是我的元组的一个小表示:

x =( (np.array[3,3,3],1), (np.array[4,4,4],2), (np.array[5,5,5],3))

我希望将所有数组组合成一个大矩阵,并将所有整数组合成一个列向量,它们都适合一个元组。

所以我的输出应该是这样的:

y= (np.array([[3,3,3],[4,4,4], [5,5,5]]),   np.array([1,2,3]))

一个元组,第一个元素为形状为 (3,3) 的数组,第二个元素为数组 形状为 (3,)

我假设我们可以使用 numpy 的堆栈方法之一,但我无法理解 围绕如何访问元组的所有元素来做到这一点。

谢谢。

【问题讨论】:

  • 那么,输出将是一个常规的 3x4 形状的数组,对吧?
  • 不,输出将是一个包含两个数组的元组——3x3 和一个 3。希望这是有道理的。
  • 你能写下实际的预期输出吗,因为你显示的不是有效的。
  • 我会看看的。我以为我写的一切都正确。我正在处理一个非常大的数据集,所以我尝试创建一个样本。
  • @Divakar 我读的时候也很困惑;忽略 []s 并假装他们将间距写成两个单独的数组。

标签: python-3.x numpy tuples


【解决方案1】:
>>> x = ((np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3))
>>> y = (np.array([e for e, _ in x]), np.array([i for _, i in x]))
(array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]]), array([1, 2, 3]))

或者,没有理解:

>>> map(np.array, zip(*x))
[array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]]), array([1, 2, 3])]

【讨论】:

  • 地图在这里表现出色,+1。我将删除我的答案,因为 OP 将他的示例从列表更改为数组。
  • map 的列表理解版本:[np.array(i) for i in zip(*x)]。关键是zip(*x) 实际上是一个列表transpose
【解决方案2】:

结构化数组方法:

首先是元组,语法更正:

In [392]: x =( (np.array([3,3,3]),1), (np.array([4,4,4]),2), (np.array([5,5,5]),3))

结构化数组的输入是一个元组列表,每个元组包含record的数据:

In [393]: arr=np.array(list(x), np.dtype('3i,i'))
In [394]: arr
Out[394]: 
array([([3, 3, 3], 1), ([4, 4, 4], 2), ([5, 5, 5], 3)],
      dtype=[('f0', '<i4', (3,)), ('f1', '<i4')])

通过字段名访问数组:

In [395]: arr['f0']
Out[395]: 
array([[3, 3, 3],
       [4, 4, 4],
       [5, 5, 5]], dtype=int32)
In [396]: arr['f1']
Out[396]: array([1, 2, 3], dtype=int32)

或作为字段的元组:

In [397]: (arr['f0'], arr['f1'])
Out[397]: 
(array([[3, 3, 3],
        [4, 4, 4],
        [5, 5, 5]], dtype=int32), array([1, 2, 3], dtype=int32))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 2011-06-19
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2017-03-19
    • 2013-03-23
    相关资源
    最近更新 更多