如何将空数组与Numpy.concatenate连接?

时间:2016-02-02 05:04:27

标签: python arrays numpy matrix concatenation

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

我目前的代码:

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矩阵而不是2x2矩阵,其值为b。

无论如何要制作一个特定大小的实际空数组,所以当我连接到它时,它的值会成为我的附加值而不是默认+添加值吗?

2 个答案:

答案 0 :(得分:2)

就像Oniow所说,连接正是你所看到的。

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

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

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作为默认值,将从默认值中产生预期的行为,例如,所有数学运算都将导致'default',因为此值表示您并不真正关心矩阵中的此索引。

答案 1 :(得分:1)

如果我正确理解你的问题 - 连接不是你想要的。如您所见,Concatenate执行:join along an axis

如果您想要一个空矩阵成为另一个的值,您可以执行以下操作:

import numpy as np

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

my_array = a + b

- 或 -

import numpy as np

my_array = np.zeros([2,2]) # you can use empty here instead in this case.

my_array[0,0] = float(input('Enter first value: ')) # However you get your data to put them into the arrays.

但是,我猜这不是你真正想要的,因为你可以使用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)