我有两个整数数组,每个元素要组合成一个'a[i]_b[i]'
形式的字符串数组。也就是说,我有
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
我想得到数组
result = np.array(['1_4', '2_5', '3_6'])
我可以很容易地做到这一点与列表理解:
result = np.array(['{}_{}'.format(a[i], b[i]) for i in range(len(a))])
但是我的数组a
和b
非常长,这太慢了。有没有办法通过numpy电话来做到这一点?什么是hstack
式的?我能做到这一点:
result np.hstack([a.resahpe(len(a), 1), b.reshape(len(b), 1)])
这让我
np.array([[1, 4]
[2, 5]
[3, 6]])
当然,一定有一个简单的方法从这里得到我想要的结果。。。你知道吗
编辑:
使用两个defchararray
调用似乎比列表理解更慢,但是frompyfunc
是有效的。。。你知道吗
>>> import timeit
>>> t = Timer("""['{}_{}'.format(a[i], b[i]) for i in range(len(b))]""", setup="""import numpy as np; a = np.random.randn(10000); b=np.random.randn(10000)""")
>>> t.timeit(1000)
22.310123541974463
>>> t2 = Timer("""np.core.defchararray.add(np.core.defchararray.add(a.astype(str),'_'), b.astype(str))""", setup="""import numpy as np; a = np.random.randn(10000); b=np.random.randn(10000)""")
>>> t2.timeit(1000)
28.489826270961203
>>> t3 = Timer("""fv(a,b)""", setup='import numpy as np; a = np.random.randn(10000); b=np.random.randn(10000); fv = np.frompyfunc("{}_{}".format, 2, 1)')
>>> t3.timeit(1000)
15.455791965010576
这里它是a
和b
长度的函数(看起来很稳定):
根据一些时间安排,这大约是列表理解和转换的运行时间的1/3np.数组. 你知道吗
你可以使用defchararray.add
相关问题 更多 >
编程相关推荐