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