Python: объединить целочисленный массив с 1 пустым массивом - PullRequest
1 голос
/ 17 февраля 2020

У меня есть один простой одномерный массив и пустой массив в 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]

Как? И какой самый эффективный способ?

Ответы [ 4 ]

1 голос
/ 17 февраля 2020

Какую точку вы хотите иметь в качестве входного массива?

используйте numpy .ones , чтобы уменьшить вычисления вместо numpy .zeros

`

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

`

1 голос
/ 17 февраля 2020

Вы можете создать b как 0-размер np.array dtype 'i' вместо списка, то есть:

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]
1 голос
/ 17 февраля 2020

Я думаю, numpy предполагает пустой массив как float64 тип данных. Если вы выполните следующую команду

np.array([]).dtype

, она вернет dtype('float64'), поэтому вы должны инициализировать пустой массив следующим образом

 b=[]
 b=np.array(b,dtype="int32")
1 голос
/ 17 февраля 2020

Попробуйте следующим образом:

numpy массив dtype по умолчанию float. Поэтому измените его на np.int32

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

...