在矩阵

时间:2016-09-22 13:06:42

标签: python numpy

如何在numpy上将单个元素插入数组中。我知道如何使用insert和axis参数插入整个列或行。但是我如何插入/扩展一个。

例如,假设我有一个数组:

1 1 1
1 1 1
1 1 1

如何插入0(在同一行),比如说(1,1)位置,说:

1 1 1
1 0 1 1
1 1 1

这可行吗?如果是这样,那么你如何做相反的事情(在同一列上),说:

1 1 1
1 0 1
1 1 1
  1

2 个答案:

答案 0 :(得分:3)

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,然后执行此操作,然后重新转置。

答案 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]),但这是不好的做法。