python中矩阵的逻辑乘法

时间:2018-07-05 11:26:09

标签: python arrays numpy

我有一个矩阵 A 和一个矢量 B ,其中矩阵 A 0 填充和 1 ,向量 B 用字符串填充。我要执行以下操作:

A = np.array([[1,1,0],[0,1,1],[0,0,1]])
B = np.array(['a','b','c'])

,结果必须是:

R = np.array(['a'+'b', 'b'+'c', 'c'])

是否可以用numpy来做到这一点?

3 个答案:

答案 0 :(得分:4)

有一种方法可以用b定义数组dtype = object

b = np.array(['a', 'b', 'c'], dtype=object)

然后,它只是一个dot产品:

a.dot(b)
#array(['ab', 'bc', 'c'], dtype=object)

答案 1 :(得分:2)

我能想到的最好的方法是:

def np_add_charrarays(*arrays):
    """Concatenate n char arrays together with n > 2"""
    res = np.core.defchararray.add(*arrays[:2])
    for arr in arrays[2:]:
        res = np.core.defchararray.add(res, arr)
    return res

np_add_charrarays(*np.core.defchararray.multiply(B, A).T)

# output: array(['ab', 'bc', 'c'], dtype='<U3')

我不太确定它是否比标准的 pure python快。帮助自己解决一些timeit

答案 2 :(得分:2)

实际上是的,有一种使用numpy的方法。使用numpy.where

import numpy as np

A = np.array([[1,1,0],[0,1,1],[0,0,1]])
B = np.array(['a','b','c'])

R = np.where(A,B,'')

print(R)
[['a' 'b' '']
 ['' 'b' 'c']
 ['' '' 'c']]

R.astype(object).sum(axis=1)
['ab', 'bc', 'c']