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
慢得多,特别是对于大型阵列。