我需要创建一个填充空值的特定大小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。
无论如何要制作一个特定大小的实际空数组,所以当我连接到它时,它的值会成为我的附加值而不是默认+添加值吗?
答案 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)