具有重复值的Numpy resize数组

2024-09-28 22:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

假设一个向量,它的项可以从一个有限的集合中获取值(例如[7, 8, 9])。我试图搜索满足某些要求的向量。 我使用numpy数组来存储向量项的可能状态。一开始我的向量是不确定的,看起来像这样

>>> A = np.tile([7, 8, 9], (3, 1))
>>> A
array([[7, 8, 9],
       [7, 8, 9],
       [7, 8, 9]])

我的算法通过减少每个单元的可能状态来工作(这里不涉及算法的细节)。例如,如果我想声明第一项只能是9,那么它工作得很好,这要归功于second broadcasting rule

^{pr2}$

但是,如果我想声明该项不能是8,并尝试将[7, 9]分配给它:

>>> A[1] = [7, 9]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot copy sequence with size 2 to array axis with dimension 3

我想在这里实现的是某种大小调整,它会自动将值填充到所需的长度,例如[7, 9, 9]或{}。我不关心确切的值,唯一重要的是操作后的set(A[1]) == {7, 9}。在

有没有可能用numpy自动调整大小?在


Tags: numpy算法声明状态withnp数组rule
1条回答
网友
1楼 · 发布于 2024-09-28 22:23:04

有一些低级操作根据需要重复数组项。它们不常用。np.put和{}出现在脑海中,但是它们在一个平坦的数组上工作,并且需要布尔掩码。但是resize可能在这里起作用:

In [17]: np.resize([7,9],3)
Out[17]: array([7, 9, 7])
In [18]: A[1,:] = np.resize([7,9], A.shape[1])
In [19]: A
Out[19]: 
array([[7, 8, 9],
       [7, 9, 7],
       [7, 8, 9]])

它甚至适用于更大的阵列:

^{pr2}$

我没用过resize,也不知道它的局限性或怪癖。在

把这种行为看作是“广播”是令人困惑的。它扩展了一些非常具体的规则,这些规则对程序和用户有效,因为它们是明确的。在

相关问题 更多 >