Python 在矩阵上插入一项
如何将单个元素插入numpy上的数组中。我知道如何使用insert和axis参数插入整列或整行。但是如何按1插入/展开 例如,假设我有一个数组:Python 在矩阵上插入一项,python,numpy,Python,Numpy,如何将单个元素插入numpy上的数组中。我知道如何使用insert和axis参数插入整列或整行。但是如何按1插入/展开 例如,假设我有一个数组: 1 1 1 1 1 1 1 1 1 如何插入0(在同一行上),比如(1,1)位置,比如: 1 1 1 1 0 1 1 1 1 1 这可行吗?如果是这样,那么你如何做相反的事情(在同一列上),比如: 我认为应该使用常规Python数组的append()(而不是numpy) 下面是一个简短的例子 A = [[1,1,1], [1,1,1],
1 1 1
1 1 1
1 1 1
如何插入0(在同一行上),比如(1,1)位置,比如:
1 1 1
1 0 1 1
1 1 1
这可行吗?如果是这样,那么你如何做相反的事情(在同一列上),比如:
我认为应该使用常规Python数组的
append()
(而不是numpy)
下面是一个简短的例子
A = [[1,1,1],
[1,1,1],
[1,1,1]]
A[1].append(1)
结果是
[[1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1]] # like in your example
不可能使用一个元素进行列扩展,因为值是按行存储的。从技术上讲,您可以执行如下操作:A.append([None,1,None])
,但这是一种不好的做法。Numpy有一些看起来像参差不齐的数组,但它们是对象数组,可能不是您想要的。请注意以下方面的差异:
In [27]: np.array([[1, 2], [3]])
Out[27]: array([[1, 2], [3]], dtype=object)
In [28]: np.array([[1, 2], [3, 4]])
Out[28]:
array([[1, 2],
[3, 4]])
如果要将v
插入行/列i/j
,可以通过填充其他行来完成。这很容易做到:
In [29]: a = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
In [30]: i, j, v = 1, 1, 3
In [31]: np.array([np.append(a[i_], [0]) if i_ != i else np.insert(a[i_], j, v) for i_ in range(a.shape[1])])
Out[31]:
array([[1, 1, 1, 0],
[1, 3, 1, 1],
[1, 1, 1, 0]])
若要沿列而不是行填充,请先转置
a
,然后执行此操作,然后再次转置。您要创建的东西在我看来不像矩阵。好的,我想您可以说它的数组。您想做什么?例如,您的总体目标是什么?很有可能,你的目标并没有得到像这样凌乱的数据结构的帮助,或者它是这样的,并且NumPy不是适合这项工作的工具。(但我愿意感到惊讶)你不能。Numpy阵列不是为那些不规则尺寸而设计的。好吧,也许你可以使用object
类型的数组(参见@AmiTavory的答案)为你找到一些有用的东西,但是它们可能会带来其他问题。如果你愿意使用None
等等,这里有一个相关的问题:
In [29]: a = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1]])
In [30]: i, j, v = 1, 1, 3
In [31]: np.array([np.append(a[i_], [0]) if i_ != i else np.insert(a[i_], j, v) for i_ in range(a.shape[1])])
Out[31]:
array([[1, 1, 1, 0],
[1, 3, 1, 1],
[1, 1, 1, 0]])