gpt4 book ai didi

python - 将 numpy 数组追加到元素中

转载 作者:行者123 更新时间:2023-12-01 03:49:26 26 4
gpt4 key购买 nike

我有一个形状为 (5,5,3,2) 的 Numpy 数组。我想获取该矩阵的元素 (1,4),它也是形状为 (3,2) 的矩阵,并向其中添加一个元素 - 这样它就变成了 (4,2) 数组。我使用的代码如下:

import numpy as np
a = np.random.rand(5,5,3,2)
a = np.array(a, dtype = object) #So I can have different size sub-matrices
a[2][3] = np.append(a[2][3],[[1.0,1.0]],axis=0) #a[2][3] shape = (3,2)

我总是收到错误:

ValueError: could not broadcast input array from shape (4,2) into shape (3,2)

我知道 np.append 函数返回的形状与 a[2][3] 子数组不同,但我认为dtype=object 可以解决我的问题。但是,我需要这样做。有什么办法可以绕过这个限制吗?我还尝试使用 insert 函数,但我不知道如何将元素添加到我想要的位置。

最佳答案

确保您了解您所生产的内容。这需要检查形状和数据类型,并可能查看值

In [29]: a = np.random.rand(5,5,3,2)
In [30]: b=np.array(a, dtype=object)
In [31]: a.shape
Out[31]: (5, 5, 3, 2) # a is a 4d array
In [32]: a.dtype
Out[32]: dtype('float64')
In [33]: b.shape
Out[33]: (5, 5, 3, 2) # so is b
In [34]: b.dtype
Out[34]: dtype('O')
In [35]: b[2,3].shape
Out[35]: (3, 2)

In [36]: c=np.append(b[2,3],[[1,1]],axis=0)
In [37]: c.shape
Out[37]: (4, 2)
In [38]: c.dtype
Out[38]: dtype('O')

b[2][3]也是一个数组。 b[2,3]是索引 2 维的正确 numpy 方法。

我怀疑你想要b成为(5,5)包含数组(作为对象)的数组,并且您认为可以简单地将其中之一替换为 (4,2)大批。但是b构造函数只需更改 floatsa到对象,而不改变 b 的形状(或 4d 性质) .

我可以构造一个 (5,5) 对象数组,并用 a 中的值填充它。 。然后用 (4,2) 数组替换这些值之一:

In [39]: B=np.empty((5,5),dtype=object)
In [40]: for i in range(5):
...: for j in range(5):
...: B[i,j]=a[i,j,:,:]
...:
In [41]: B.shape
Out[41]: (5, 5)
In [42]: B.dtype
Out[42]: dtype('O')
In [43]: B[2,3]
Out[43]:
array([[ 0.03827568, 0.63411023],
[ 0.28938383, 0.7951006 ],
[ 0.12217603, 0.304537 ]])
In [44]: B[2,3]=c
In [46]: B[2,3].shape
Out[46]: (4, 2)

此构造函数为 B有点粗糙。我已经回答了有关创建/填充对象数组的其他问题,但我不会在这里花时间来简化这个案例。仅用于说明目的。

关于python - 将 numpy 数组追加到元素中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38483650/

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