【问题标题】:insert column into array using scaler obj (numpy.insert)使用缩放器 obj (numpy.insert) 将列插入数组
【发布时间】: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


【解决方案1】:

经过搜索,我们找到了如下答案:

缩放器索引的输出是一维数组

a = np.array([[1, 6], [2, 7], [3, 8]])
print(a)
print(a[:,1])
print(a[:,[1]])
    
>>> 
a
[[1 6]
 [2 7]
 [3 8]]

a[:,1]
 [6 7 8]

a[:,[1]]
 [[6]
 [7]
 [8]]

因此,当使用缩放器索引沿轴 1 插入列时,将为缩放器输出(一维数组)分配值,然后转置缩放器输出值以适合索引列。

a = np.array([[1, 6], [5, 2]])
print(a,'\n')

c4 = np.insert(a, 1, [[9,88],[99,66]], axis=1)
print(c4,'\n')

a[:,1]

a[:,1] = [a01 a11] = [[9  88]
                     [99 66]]

所以

a01 = [[9 ]      a11 = [[88]
       [99]]            [66]]

之后 a[:,1] 将被转置以适应列

[[ 1  9 99  6]
 [ 5 88 66  2]]

当使用缩放器索引沿轴 1 插入列时,缩放器输出将适合行索引,

a = np.array([[1, 6], [2, 7], [3, 8]])
c11 = np.insert(a, 1, [9,99], axis=0)
print(c11,'\n')
c12 = np.insert(a, 1, [[9],[99]], axis=0)
print(c12,'\n')

a[1,:] of c11

a[1,:] = [a10 a11] = [9  99]

所以

a10 = [9]      a11 = [99]
                  

a[1,:] of c12(值将被广播)以适应 obj

a[1,:] = [a10 a11] = [[9  9 ]                         
                      [99 99]]

所以

a10 = [[9 ]      a11 = [[9 ]
       [99]]            [99]]

结果:

[[ 1  6]
 [ 9 99]
 [ 2  7]
 [ 3  8]] 

[[ 1  6]
 [ 9  9]
 [99 99]
 [ 2  7]
 [ 3  8]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2011-02-21
    相关资源
    最近更新 更多