【问题标题】:Numpy add one array to another one [closed]Numpy将一个数组添加到另一个数组[关闭]
【发布时间】:2021-12-10 22:46:11
【问题描述】:

A = np.array([])

B = np.array([1,2])
C = np.array(["hey"])
D = np.array([])

我正在寻找一个可以将数组 B、C、D 附加到 A 的函数。但不是值,而是整个数组:

所以 A 应该是这样的:

A = np.array([[1,2],["hey"],[])

追加不起作用,连接以及堆栈等也不起作用,因为数组不一定具有相同的形状。有没有办法,例如,在追加时指定类型?

【问题讨论】:

  • 您可以考虑在这里使用列表。
  • 你在最后一个 sn-p 中缺少一个括号
  • 正如@MadPhysicist 所指出的,numpy 中的“num”代表“数字”。它专为数值计算而设计和优化。虽然您仍然可以将它与通用 dtype=object 一起使用,但它通常没有意义,因为您无法利用其他可用的优化,而且您通常最好使用本机 python 列表。你最终想要达到什么目的?如果你在做大数据操作,你也可以考虑 pandas 而不是 numpy...
  • 我不喜欢在 SO 问题中看到“不起作用”。显示实际代码和错误。 np.append(np.append(np.append(A,B),C),D) 确实运行。 np.concatenate([A,B,C,D]) 也是如此。解释这些有什么问题,你从中学到了什么。
  • 最后一个表达式 np.array([[1,2],["hey"],[]) 确实运行了 - 但带有明显的警告。这不是告诉你什么重要的事情吗?

标签: python arrays numpy multidimensional-array


【解决方案1】:

附加不是在 numpy 中就地完成的,因为它在固定缓冲区上运行。由于您的列表参差不齐且不均匀,您可以这样做:

A = np.array([B, C, D])

在这种特殊情况下,dtype 将自动为object,结果将是一个数组数组。

这基本上违背了使用 numpy 的目的:在追加和删除操作时,数组比列表慢。相反,使用列表可能会更好:

A.extend([B, C, D])

或者,如果您尝试描述结构化数据类型,您可以使用 numpy 有效地做到这一点:

dt = np.dtype([('b', float, 2), ('c', 'U3'), ('d', float, 0)])
A = np.array([(B, C.item(), D)], dtype=dt)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2020-12-21
    相关资源
    最近更新 更多