【问题标题】:python numpy how to insert multiple rows between each rowpython numpy如何在每行之间插入多行
【发布时间】:2022-11-22 17:53:32
【问题描述】:

我有一个像这样的 numpy 数组:

  • 26.4812 32.0000 -5.0000 10000.0000 20000.0000 2.0000
  • 26.4812 32.0000 10.0000 10000.0000 20000.0000 2.0000
  • 26.4812 32.0000 0.0000 10000.0000 20000.0000 2.0000...

我想更改它,以便第 3 列(z 值)有更多这样的步骤:

  • 26.4812 32.0000 -5.0000 10000.0000 20000.0000 2.0000
  • 26.4812 32.0000 -4.0000 10000.0000 20000.0000 2.0000
  • 26.4812 32.0000 -3.0000 10000.0000 20000.0000 2.0000
  • ...
  • 26.4812 32.0000 9.0000 10000.0000 20000.0000 2.0000
  • 26.4812 32.0000 10.0000 10000.0000 20000.0000 2.0000...

在此示例中,步长必须由变量 step = 1mm 定义。 我怎样才能做到这一点?

【问题讨论】:

  • 请提供一个最小的可复制的示例(两个词都很重要)
  • 您是否尝试过一个简单的 for 循环来生成一个列表然后将其转换为 numpy 数组?否则,您可以尝试拆分数组以插入元素或生成更大的数组并替换 z 值。

标签: python numpy numpy-ndarray


【解决方案1】:

这可能有点难看,但它可以满足您的要求:

arr1 = np.array([[1, -3, -3],
           [1, 3, 3],
           [1, 3, 7]])
z=arr1[:, 2]
new_z = []
for i in range(len(z)-1):
     new_z.append(np.arange(z[i],z[i+1]+1))
new_z = np.unique(np.concatenate(new_z))
new_array = np.c_[np.repeat(arr1[0, 0], new_z.shape[0]), new_z, 
np.repeat(arr1[0, 2], new_z.shape[0])]
print(new_array)

【讨论】:

    【解决方案2】:
    import numpy as np
    
    def generate_array(zmin, zmax, step=1):
      # generate z values based on min, max and step (-5, 10, and 1 in the example)
      z_values= np.arange(zmin, zmax+step, step)
    
      # create an array with the same data for every z value (for now)
      default_value = 0
      array = np.repeat([[26.4812, 32.0000, default_value, 10000.0000, 20000.0000, 2.0000]], len(z_values), axis=0)
      
      # replace the z values
      array[:, 2] = z_values
    
      return array
    

    这可以像这样使用

    >>> generate_array(-5, 10)
    >>> array([
      [ 2.64812e+01,  3.20000e+01, -5.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01, -4.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01, -3.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01, -2.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01, -1.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  0.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  1.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  2.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  3.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  4.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  5.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  6.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  7.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  8.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  9.00000e+00,  1.00000e+04, 2.00000e+04,  2.00000e+00],
      [ 2.64812e+01,  3.20000e+01,  1.00000e+01,  1.00000e+04, 2.00000e+04,  2.00000e+00]
    ])
    

    【讨论】:

      猜你喜欢
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多