【问题标题】:Python - Merge Multiple 2D Arrays with Same Dimensions into One 2d ArrayPython - 将多个具有相同维度的二维数组合并为一个二维数组
【发布时间】:2018-09-20 20:16:38
【问题描述】:

我有 3 个具有相同尺寸的 2D numpy 浮点数组(R、G、B)。我想将它合并到一个二维数组中,使新二维数组中的每个元素都是一个由 3 个浮点数组成的数组。以下是我的初始代码:

image = cv2.imread('hurricane katrina 1.jpg', cv2.IMREAD_GRAYSCALE)

a = 255
b = 2 * (np.pi/255)
c = np.pi / 5


R = a * np.absolute(np.sin(b * image))
G = a * np.absolute(np.sin(b * image + c))
B = a * np.absolute(np.sin(b * image + 2 * c))

如何在不遍历数组的情况下在 Python 中执行此操作?谢谢。

更新:

我想合并 3 个数组。比如说

R[0][0] = 3 
G[0][0] = 4 
B[0][0] = 6

那么合并数组就是

RGB[0][0] = (3,4,6)

这对于数组中的所有元素都是正确的。

所以最终的输出形状将是(1000,775,3)

【问题讨论】:

  • Merge 和 concat 在 numpy 和列表​​的情况下实际上是一回事。

标签: python arrays python-3.x numpy opencv


【解决方案1】:

np.concatenate((a, b,c), axis=see what you want, probably 1)

或者 你也可以使用 hstack...(它们都是同一个东西...)

Doing, rgb_transform = np.concatenate(R,G,B), throws an error. TypeError: only integer scalar arrays can be converted to a scalar index, 但它不应该抛出,因为我已经在括号中传递了它们

为了解决这个问题,可能 做这个 np.concatenate([a, b, c], axis=see what you want, probably 1)

请参考docs

编辑

问的和上面的有点不同,所以正确的答案是做 np.stack((r,g,b),2) 因为最终输出是 (1000,775,3)...

【讨论】:

  • 做,rgb_transform = np.concatenate(R,G,B),抛出错误。 TypeError: 只有整数标量数组可以转换为标量索引
  • 您缺少额外的括号,它们是必要的@Eliyah
  • 要连接的第一个参数本身应该是要连接的数组序列...
  • 谢谢,我尝试了 rgb_transform = np.concatenate([R,G,B], axis=0, out=None) 并证明有效。但我的问题不是地址,我想合并,而不是连接。
  • 这样就解决了问题。谢谢,您可以编辑您的答案,以便我将其标记为正确。 :)
猜你喜欢
  • 2022-08-18
  • 2021-10-21
  • 1970-01-01
  • 1970-01-01
  • 2017-12-13
  • 2017-10-12
  • 2018-02-09
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多