Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用Numpy.concatenate连接空数组?_Python_Arrays_Numpy_Matrix_Concatenation - Fatal编程技术网

Python 如何使用Numpy.concatenate连接空数组?

Python 如何使用Numpy.concatenate连接空数组?,python,arrays,numpy,matrix,concatenation,Python,Arrays,Numpy,Matrix,Concatenation,我需要创建一个特定大小的数组mxn填充空值,这样当我将连接到该数组时,初始值将被添加的值覆盖 我当前的代码: a = numpy.empty([2,2]) # Make empty 2x2 matrix b = numpy.array([[1,2],[3,4]]) # Make example 2x2 matrix myArray = numpy.concatenate((a,b)) # Combine empty and example arrays 不幸的是,我最终生成了一个

我需要创建一个特定大小的数组
mxn
填充空值,这样当我将
连接到该数组时,初始值将被添加的值覆盖

我当前的代码:

a = numpy.empty([2,2])  # Make empty 2x2 matrix
b = numpy.array([[1,2],[3,4]])    # Make example 2x2 matrix
myArray = numpy.concatenate((a,b))    # Combine empty and example arrays
不幸的是,我最终生成了一个
4x2
矩阵,而不是一个值为b的
2x2
矩阵


是否有必要创建一个特定大小的实际空数组,以便在连接到它时,它的值成为我的附加值,而不是默认值+附加值?

如果我正确理解您的问题,则连接不是您想要的。连接如您所见:连接

如果试图使空矩阵成为另一个矩阵的值,可以执行以下操作:

import numpy as np

a = np.zeros([2,2])
b = np.array([[1,2],[3,4]])

my_array = a + b
def get_default(size_x,size_y):
    # returns a new matrix filled with 'default values'
    tmp = np.empty([size_x,size_y])
    tmp.fill(np.nan)
    return tmp
--或--

但是,我猜这不是您真正想要的,因为您可以使用
my_array=b
。如果你编辑你的问题与更多的信息,我可能能够帮助更多

如果您担心值会随着时间的推移而添加到数组中

import numpy as np

a = np.zeros([2,2])

my_array = b # b is some other 2x2 matrix
''' Do stuff '''
new_b # New array has appeared
my_array = new_b # update your array to these new values. values will not add. 

# Note: if you make changes to my_array those changes will carry onto new_b. To avoid this at the cost of some memory:
my_array = np.copy(new_b)

就像Oniow说的,concatenate做的和你看到的完全一样

如果您想要不同于常规标量元素的“默认值”,我建议您使用NAN(作为“默认值”)初始化数组。如果我理解您的问题,您希望合并矩阵,以便常规标量将覆盖“默认值”元素

无论如何,我建议您添加以下内容:

import numpy as np

a = np.zeros([2,2])
b = np.array([[1,2],[3,4]])

my_array = a + b
def get_default(size_x,size_y):
    # returns a new matrix filled with 'default values'
    tmp = np.empty([size_x,size_y])
    tmp.fill(np.nan)
    return tmp
而且:

def merge(a, b):
    l = lambda x, y: y if np.isnan(x) else x
    l = np.vectorize(l)
    return map(l, a, b)
请注意,如果合并2个矩阵,且两个值均为非“默认值”,则将采用左矩阵的值


使用NaN作为默认值,将根据默认值产生预期行为,例如,所有数学运算将产生“默认”,因为该值表明您并不真正关心矩阵中的此索引。

为什么不直接执行
a[:]=b
?或者
a=b.copy()
?在此操作之后,是否要保留
a
的任何初始元素?请注意两件事-
np。nan
是一个浮点,因此这对于
dtype=int
数组是一件好事。而且你的
矢量化操作几乎和所有元素上的普通迭代一样慢(最多2倍的加速)。它将比tmp[:]=b
慢得多,特别是对于大型阵列。