如何从NumPy矩阵中的列而不是行中减去?

时间:2017-02-05 11:15:52

标签: python numpy matrix transpose

我有一个矩阵[[ 2. nan nan nan] [ 3. 2. nan nan] [ nan 5. 5. nan] [ nan nan nan nan]]

b

列表[-1.0, 2.0, 0.5, -2.0]

X - b

当我[[ 3. nan nan nan] [ 4. 0. nan nan] [ nan 3. 4.5 nan] [ nan nan nan nan]] 时,我得到:

b

如果我想跨列而不是行减去X - b.transpose()该怎么办?

我正在寻找[[ 3. nan nan nan] [ 1. 0. nan nan] [ nan 4.5 4.5 nan] [ nan nan nan nan]]

之类的东西
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var lojasSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true
  },
  nome: {
    type: String,
    required: true,
    unique: true
  },
  descricao: {
    type: String,
    default: "No description for this store"
  },
  telefone:{
    type:String,
  },
  password:
  {
    type: String, required: true
  }
  ,
  img: {
    data: Buffer, contentType: String
  },
  imgNome: {
    type: String
  },
  produtos: [
    { type: mongoose.Schema.ObjectId, ref: 'Produto' }
  ],
});

module.exports = mongoose.model('Loja', lojasSchema);

2 个答案:

答案 0 :(得分:2)

使用numpy.vstack函数的解决方案(垂直堆叠数组):

a = np.array([[ 2.0,  np.NaN,  np.NaN,  np.NaN],
     [  3.0,   2.0, np.NaN,  np.NaN],
     [ np.NaN,   5.0,   5.0,  np.NaN],
     [ np.NaN,  np.NaN,  np.NaN,  np.NaN]])

b = np.array([-1.0, 2.0, 0.5, -2.0])
print(a - np.vstack(b))

输出:

[[ 3.   nan  nan  nan]
 [ 1.   0.   nan  nan]
 [ nan  4.5  4.5  nan]
 [ nan  nan  nan  nan]]

答案 1 :(得分:2)

这是一个值得指出的问题:

>>> a = np.identity(4)
>>> a
array([[ 1.,  0.,  0.,  0.],                                                                                                                                
       [ 0.,  1.,  0.,  0.],                                                                                                                                
       [ 0.,  0.,  1.,  0.],                                                                                                                                
       [ 0.,  0.,  0.,  1.]])                                                                                                                               
>>> b = [1,2,3,4]                                                                                                                     
>>> a-b                                                                                                                                                     
array([[ 0., -2., -3., -4.],                                                                                                                                
       [-1., -1., -3., -4.],                                                                                                                                
       [-1., -2., -2., -4.],                                                                                                                                
       [-1., -2., -3., -3.]])                                                                                                                               
>>> a-np.matrix(b)
matrix([[ 0., -2., -3., -4.],                                                                                                                               
        [-1., -1., -3., -4.],                                                                                                                               
        [-1., -2., -2., -4.],                                                                                                                               
        [-1., -2., -3., -3.]])                                                                                                                              
>>> a-np.array(b)                                                                                                                                     
array([[ 0., -2., -3., -4.],                                                                                                                                
       [-1., -1., -3., -4.],                                                                                                                                
       [-1., -2., -2., -4.],                                                                                                                                
       [-1., -2., -3., -3.]])
>>> a-np.matrix(b).T # T is short for transpose()
matrix([[ 0., -1., -1., -1.],
        [-2., -1., -2., -2.],
        [-3., -3., -2., -3.],
        [-4., -4., -4., -3.]])
>>> # BUT:
... a-np.array(b).T
array([[ 0., -2., -3., -4.],
       [-1., -1., -3., -4.],
       [-1., -2., -2., -4.],
       [-1., -2., -3., -3.]])
>>> # with 1d arrays .T does nothing! Use instead
... a-np.array(b)[:, None]
array([[ 0., -1., -1., -1.],
       [-2., -1., -2., -2.],
       [-3., -3., -2., -3.],
       [-4., -4., -4., -3.]])