gpt4 book ai didi

python - 我可以从 numpy 数组列表中创建一个具有一个可变维度的 numpy 数组吗?

转载 作者:太空宇宙 更新时间:2023-11-03 21:34:57 25 4
gpt4 key购买 nike

这是我的问题的最小示例,我有一个如下所示的 numpy 数组列表:

a = np.zeros([4,3])
b = np.ones([5,3])
my_list = [a, b]

my_list
[array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]]), array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])]

列表中的数组在一个(且仅一个)维度(此处为 4 或 5)中可以具有可变长度。

我最终想要的是一个维度为 (2, "Variable-size", 3) 的 numpy 数组。输出应如下所示:

array([[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]]])

np.vstack() 或 np.concatenate() 不会返回我正在寻找的形状,因为它们生成的输出具有 (9, 3) 形状。

最佳答案

您不能使用形状为 (2, "Variable-size", 3) 的 numpy 数组,但您可以使用形状 ("Variable-size"连接两个数组", 3)(shape1[0] + shape2[0], 3)。正如您所写:

I am looking for as they are producing an output that has a (9, 3) shape

numpy.concatenate()

可以解决您的问题:

np.concatenate((a,b))

输出:

array([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])

如果您仍然想在 numpy 中维护可变的第三维,唯一的方法是使用填充,这里使用零填充:

import numpy as np

a = np.array([
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[0., 0., 0.] # zero padding
])

b = np.array([
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.]
])

new_matrix = [a, b]

print(new_matrix)

输出:

[array([[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[50., 50., 50.],
[ 0., 0., 0.]]), array([[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.],
[80., 80., 80.]])]

该方法广泛应用于各种图像处理解决方案中。通过这个技巧,您也可以利用 numpy 中矩阵运算的所有积极属性,但您可以保持数据形状相对灵活。正如 Willem 上面提到的,numpy 仅适用于“矩形”数据,并且可变维矩阵的操作在大多数情况下都是不明确的。

如果您甚至不想使用任何提到的解决方案,则必须选择列表和 numpy 数组组合,即列表中具有任何维度的 numpy 数组。

关于python - 我可以从 numpy 数组列表中创建一个具有一个可变维度的 numpy 数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53290903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com