Julia中如何使用broadcast实现字符串列表两两比较并返回二维数组?
在Julia中用broadcast生成字符串对比较的二维数组
你遇到的问题是因为直接对两个同维度的一维数组使用broadcast(==)时,Julia会执行逐元素对应比较,也就是只比较每个位置上的元素(str_list[i] == str_list[i]),所以返回的是和原数组长度一致的向量。
要让broadcast输出二维数组,只需要让其中一个数组变成列向量(或者行向量,只要维度匹配触发二维广播即可),这样两个数组的维度会被扩展成二维,从而生成所有元素对的比较结果。下面是几种实现方式:
方法1:转置其中一个数组
利用转置操作把其中一个一维数组变成列向量,再用broadcast(或简化的点语法):
str_list = ["apple", "banana", "cherry"] # 用broadcast函数 equal_strs = broadcast(==, str_list, str_list') # 或者用点语法(更简洁的broadcast写法) equal_strs = str_list .== str_list'
方法2:reshape成列向量
用reshape把其中一个数组转换成N×1的列向量:
equal_strs = broadcast(==, str_list, reshape(str_list, :, 1)) # 点语法版本 equal_strs = str_list .== reshape(str_list, :, 1)
方法3:添加单元素维度
通过[:, nothing]给数组添加一个长度为1的维度,生成列向量:
equal_strs = broadcast(==, str_list, str_list[:, nothing]) # 点语法版本 equal_strs = str_list .== str_list[:, nothing]
以上三种方法生成的结果,和你用列表推导式[(x == y) for x in str_list, y in str_list]得到的二维布尔数组完全一致,每个位置(i,j)对应str_list[i] == str_list[j]的结果。
内容的提问来源于stack exchange,提问作者Jingyang Wang
相关产品推荐
相关产品推荐

