制作矩阵正方形并用numpy中的所需值填充它

时间:2012-06-03 14:41:05

标签: python numpy

一般来说,我们可以使用任意大小的矩阵。对于我的应用,必须有方形矩阵。虚拟条目也应具有指定值。我想知道是否有任何内置的numpy?

或者最简单的方法

编辑:

矩阵X已经存在并且没有平方。我们想要填充值以使其成为正方形。用虚拟给定值填充它。所有原始值都保持不变。

非常感谢

3 个答案:

答案 0 :(得分:6)

在LucasB的答案的基础上,这是一个函数,它将填充具有给定值mRef.child("Q6i3fI6lNdYYS0z5Jty4WUYE9g13").child("SavedImages").addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Iterator<DataSnapshot> data = dataSnapshot.getChildren().iterator(); while(data.hasNext()) { String savedImage = (String) data.next().child("Image").getValue(); savedImages.add(0, savedImage); } //Data has finished loading. Load your adapter adapter = new customSwipeAdapter(this, savedImages); viewPager.setAdapter(adapter); viewPager.setPageTransformer(false, new DefaultTransformer()); } @Override public void onCancelled(DatabaseError databaseError) {} }); 的任意矩阵M,使其变为正方形:

val

答案 1 :(得分:4)

自Numpy 1.7以来,有numpy.pad功能。这是一个例子:

>>> x = np.random.rand(2,3)
>>> np.pad(x, ((0,1), (0,0)), mode='constant', constant_values=42)
array([[  0.20687158,   0.21241617,   0.91913572],
       [  0.35815412,   0.08503839,   0.51852029],
       [ 42.        ,  42.        ,  42.        ]])

答案 2 :(得分:2)

对于2D numpy数组m,通过创建一个max(m.shape) x max(m.shape)数组p并将其乘以所需的填充值,可以直接执行此操作将与p(即m)对应的p[0:m.shape[0], 0:m.shape[1]]切片设置为等于m

这导致了以下函数,其中第一行处理输入只有一个维度(即数组而不是矩阵)的可能性:

import numpy as np

def pad_to_square(a, pad_value=0):
  m = a.reshape((a.shape[0], -1))
  padded = pad_value * np.ones(2 * [max(m.shape)], dtype=m.dtype)
  padded[0:m.shape[0], 0:m.shape[1]] = m
  return padded

所以,例如:

>>> r1 = np.random.rand(3, 5)
>>> r1
array([[ 0.85950957,  0.92468279,  0.93643261,  0.82723889,  0.54501699],
       [ 0.05921614,  0.94946809,  0.26500925,  0.02287463,  0.04511802],
       [ 0.99647148,  0.6926722 ,  0.70148198,  0.39861487,  0.86772468]])
>>> pad_to_square(r1, 3)
array([[ 0.85950957,  0.92468279,  0.93643261,  0.82723889,  0.54501699],
       [ 0.05921614,  0.94946809,  0.26500925,  0.02287463,  0.04511802],
       [ 0.99647148,  0.6926722 ,  0.70148198,  0.39861487,  0.86772468],
       [ 3.        ,  3.        ,  3.        ,  3.        ,  3.        ],
       [ 3.        ,  3.        ,  3.        ,  3.        ,  3.        ]])

>>> r2=np.random.rand(4)
>>> r2
array([ 0.10307689,  0.83912888,  0.13105124,  0.09897586])
>>> pad_to_square(r2, 0)
array([[ 0.10307689,  0.        ,  0.        ,  0.        ],
       [ 0.83912888,  0.        ,  0.        ,  0.        ],
       [ 0.13105124,  0.        ,  0.        ,  0.        ],
       [ 0.09897586,  0.        ,  0.        ,  0.        ]])