我有一个矩阵 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
来做到这一点?
答案 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']