python - 使用 Python 将整个数组作为一个元素附加到另一个数组中,该数组内部具有不同大小的数组
问题描述
假设我有这样的数组'a'
>>> a = np.array([[1,2], [3,4,5]])
>>> a.shape
(2,)
>>>
现在我想将像 [6,7,8,9] 这样的整个数组作为一个元素而不是四个元素附加到它:
>>> b = np.append(a,[6,7,8,9])
>>> b.shape
(6,)
>>>
但这不是我想要的。我想要的是通过将新数组的每个元素堆叠到 a 来使 b 具有 3 个元素而不是 6 个元素。我找到了一种解决方法,如下所示,但完成此操作的正确方法是什么?
>>> b = np.append(a,[0])
>>> b[2] = [6,7,8,9]
>>> b.shape
(3,)
>>>
解决方案
定义2个数组:
In [19]: a = np.array([[1,2], [3,4,5]])
In [20]: b = np.array([6,7,8,9])
In [21]: a
Out[21]: array([list([1, 2]), list([3, 4, 5])], dtype=object)
由于a
是一个列表数组,让我们回溯并定义b
为一个列表:
In [22]: b = [6,7,8,9]
与列表相比,对象数组几乎没有(如果有的话)优势。最大的缺点是它没有append
方法:
In [23]: a.tolist()
Out[23]: [[1, 2], [3, 4, 5]]
In [24]: alist = a.tolist()
In [25]: alist.append(b)
In [26]: np.array(alist)
Out[26]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)
虽然我们可以找到一种方法来制作包含 3 个元素的新数组,但我怀疑它是否会比这个列表附加更好。
当我们尝试 时concatenate
,b
列表首先变成了一个数组:
In [30]: np.concatenate([a,b])
Out[30]: array([list([1, 2]), list([3, 4, 5]), 6, 7, 8, 9], dtype=object)
In [31]: np.array(b)
Out[31]: array([6, 7, 8, 9])
所以这将 (2,)a
与 (4,)连接起来b
产生 (6,)。
要进行您想要的连接,我们必须首先包装b
一个类似的对象 dtype 数组:
In [32]: c = np.array([None])
In [33]: c
Out[33]: array([None], dtype=object)
In [34]: c[0]=b
In [35]: c
Out[35]: array([list([6, 7, 8, 9])], dtype=object)
c
是 (1,) 对象 dtype,可a
根据需要与 (2,) 配对:
In [36]: np.concatenate((a,c))
Out[36]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)
这实际上与您附加的 [0] 相同:
In [40]: d = np.concatenate([a, [None]])
In [41]: d
Out[41]: array([list([1, 2]), list([3, 4, 5]), None], dtype=object)
In [42]: d[-1] = b
In [43]: d
Out[43]: array([list([1, 2]), list([3, 4, 5]), list([6, 7, 8, 9])], dtype=object)
您必须以一种或其他方式转换b
为单个元素数组,而不是 4 element Out[31]
。 concatenate
加入数组。
推荐阅读
- amazon-web-services - AWS EC2:如何从仪表板检查磁盘大小和使用情况?
- java - 输入特定字符串后如何在java中停止while循环?
- c# - xaml/wpf TabControl 如何使用 100% 的屏幕进行拉伸
- asp.net - 如何在 ASP.NET webapp 中的服务器和客户端之间进行通信?
- android - 在 Flutter 中使用 Map 的 PageController
- javascript - Firebase电话身份验证在Vue js中不起作用
- spring-boot - Spring Boot 中的 Keycloak 管理客户端
- javascript - 来自 json 对象的多维数组
- javascript - 如何在网站上显示 wordpress 数据库表中的记录数
- acumatica - 如何使用带有投影 INKitAssembly 投影类的扩展表?