【发布时间】:2021-04-28 12:26:11
【问题描述】:
import numpy as np
a = np.array([[1, 6], [2, 7], [3, 8]])
print(a,'\n')
c2 = np.insert(a, [1], [[9],[99],[999]], axis=1)
print(c2,'\n')
c3 = np.insert(a, 1, [9,99,999], axis=1)
print(c3,'\n')
c4 = np.insert(a, 1, [[9],[99],[999]], axis=1)
print(c4,'\n')
c5 = np.insert(a, [1], [9,99,999], axis=1)
>>>the result:
[[1 6]
[2 7]
[3 8]]
c2 =
[[ 1 9 6]
[ 2 99 7]
[ 3 999 8]]
c3 =
[[ 1 9 6]
[ 2 99 7]
[ 3 999 8]]
c4 =
[[ 1 9 99 999 6]
[ 2 9 99 999 7]
[ 3 9 99 999 8]]
c5 =
[[ 1 9 99 999 6]
[ 2 9 99 999 7]
[ 3 9 99 999 8]]
为什么 C4 不采用列值并将其插入到第 1 列中的每个项目之前 我认为应该是 [[ 1 9 6][ 2 99 7][ 3 999 8]]
还有
a = np.array([[1, 6], [5, 2]])
print(a,'\n')
c4 = np.insert(a, 1, [[9,88],[99,66]], axis=1)
print(c4,'\n')
为什么结果等于
[[ 1 9 99 6]
[ 5 88 66 2]]
不等于
[[ 1 9 88 6]
[ 5 99 66 2]]
而沿轴0的插入轴将正常插入
c11 = np.insert(a, 1, [9,99], axis=0)
print(c11,'\n')
c12 = np.insert(a, 1, [[9],[99]], axis=0)
print(c12,'\n')
结果:
[[ 1 6]
[ 9 99]
[ 2 7]
[ 3 8]]
[[ 1 6]
[ 9 9]
[99 99]
[ 2 7]
[ 3 8]]
【问题讨论】:
-
insert文档说使用1和[1]之间存在差异,但并不太清楚。它看起来比标量位置是转置值。代码很复杂,因此很难准确追踪发生了什么。通过一些输入,我得到broadcasting错误,这意味着它创建了一个带有n开放槽的目标,并使用广播将值分配给它们。多少个槽似乎取决于索引大小和值的形状。 -
如果
np.insert太混乱,请自己进行“插入”。如果在末尾或开头插入,请使用concatenate。或者创建一个正确形状的接收者数组,并从原始数组和新数组中分配值。insert只是一个方便的工具,它没有添加任何必要的功能。 -
否,scaler对象没有转置值,因为轴0的insert方法会正常插入。请在编辑后查看问题
标签: python arrays numpy insert data-manipulation