我想要一个矢量化的方式来做:第一个月例如,我可能想将[0.1, 0.2, 0.3]发送到["string_0.1_string", "string_0.2_string", "string_0.3_string"],但是values的形状是任意的,而且可能很大。然而,numpy.char.add似乎不是一个ufunc,而且不能只做numpy.char.add.reduce。是否有一个文档化的解决方案,或者我需要做一些聪明的事情?
[0.1, 0.2, 0.3]
["string_0.1_string", "string_0.2_string", "string_0.3_string"]
values
numpy.char.add
numpy.char.add.reduce
0dxa2lsx1#
您的样品列表/阵列:
In [71]: x=[0.1, 0.2, 0.3]; xx = np.array(x,'U5');xx Out[71]: array(['0.1', '0.2', '0.3'], dtype='<U5')
字符串从文档中可以清楚地看到,char.add不是ufunc,它只是相关字符串方法的一个浅层 Package 器。但是我们可以将add链接起来,就像我们做的那样('string_'+'0.01'+'_string'):
char.add
ufunc
add
In [72]: np.char.add(np.char.add('string_',xx),'_string') Out[72]: array(['string_0.1_string', 'string_0.2_string', 'string_0.3_string'], dtype='<U19')
型numpy没有处理字符串的特殊代码,因此char函数的运行速度通常与列表解析相同。有一个char.join,但它对数组的字符进行操作:
numpy
char
char.join
In [74]: np.char.join('_',xx) Out[74]: array(['0_._1', '0_._2', '0_._3'], dtype='<U5')
型另一种方法是将np.vectorize或np.frompyfunc与效用函数一起使用,如:
np.vectorize
np.frompyfunc
In [75]: def foo(i): ...: return '_'.join(['string',str(i),'string']) ...: In [76]: np.frompyfunc(foo,1,1)(x) Out[76]: array(['string_0.1_string', 'string_0.2_string', 'string_0.3_string'], dtype=object)
型对于小数组,np.vectorize/frompyfunc往往比列表解析慢一点,但对于大数组,它们的伸缩性更好。但主要的优点是,他们处理多个维度和广播。
np.vectorize/frompyfunc
1条答案
按热度按时间0dxa2lsx1#
您的样品列表/阵列:
字符串
从文档中可以清楚地看到,
char.add
不是ufunc
,它只是相关字符串方法的一个浅层 Package 器。但是我们可以将
add
链接起来,就像我们做的那样('string_'+'0.01'+'_string'):型
numpy
没有处理字符串的特殊代码,因此char
函数的运行速度通常与列表解析相同。有一个
char.join
,但它对数组的字符进行操作:型
另一种方法是将
np.vectorize
或np.frompyfunc
与效用函数一起使用,如:型
对于小数组,
np.vectorize/frompyfunc
往往比列表解析慢一点,但对于大数组,它们的伸缩性更好。但主要的优点是,他们处理多个维度和广播。