【问题标题】:Python: concatenate an integer array with 1 empty arrayPython:将一个整数数组与 1 个空数组连接起来
【发布时间】:2020-06-01 10:19:49
【问题描述】:

我在 NumPy 中有一个简单的一维数组和一个空数组。我尝试连接它们,但我得到一个浮点数组。

from numpy import *
a = zeros(5,'i')
a += 1
b = []
c = hstack((a,b))
d = concatenate((a, b))
print("a",a)
print("b",b)
print("c",c)
print("d",d)

我明白了:

a [1 1 1 1 1]

b []

c [1. 1. 1. 1. 1.]

d [1. 1. 1. 1. 1.]

但我正在寻找一个整数数组

[1 1 1 1 1]

怎么样?最有效的方法是什么?

【问题讨论】:

  • hstack((a,b)).astype("i") ?
  • 您好 Nullman,感谢您的回答。它对我也很有效。

标签: python arrays integer concatenation


【解决方案1】:

试试这个方法:

numpy数组dtype默认是float。所以,改成np.int32

a = np.zeros(5,dtype=np.int32)
a += 1
b = np.array([],dtype=np.int32)

【讨论】:

    【解决方案2】:

    您可以将b 创建为 dtype 'i' 的 0-size np.array 而不是列表,即:

    import numpy as np
    a = np.zeros(5,'i')
    a += 1
    b = np.array([],'i')
    c = np.hstack((a,b))
    d = np.concatenate((a, b))
    print(d)
    

    输出:

    [1 1 1 1 1]
    

    【讨论】:

      【解决方案3】:

      我认为 numpy 将空数组假定为 float64 数据类型。 如果你运行以下

      np.array([]).dtype
      

      它返回dtype('float64') 所以你应该如下初始化空数组

       b=[]
       b=np.array(b,dtype="int32")
      

      【讨论】:

        【解决方案4】:

        你愿意拥有与输入相同的数组有什么意义?

        使用 numpy.ones 代替 numpy.zeros

        来减少计算

        `

        import numpy
        a = numpy.ones(5,dtype=int) 
        b = []
        b = numpy.array([],dtype=int)
        d = concatenate((a, b))
        

        `

        【讨论】:

        • 感谢您的回答,它有效。在我的情况下, b 可以是任何整数数组,而当它为空时会引发问题。所以我正在寻找一种方法来以最小的代码更改来解决这个问题。
        猜你喜欢
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-04
        • 2015-07-30
        • 1970-01-01
        • 1970-01-01
        • 2013-01-24
        相关资源
        最近更新 更多