小编Fre*_*red的帖子

使用Julia在字符串中每10个字符插入一个换行符

我想在蛋白质序列中每10个字符插入一个换行符:

seq="MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIALFQ"
Run Code Online (Sandbox Code Playgroud)

在Perl中,它非常简单:

$seq=~s/(.{10})/$1\n/g ; # does the job!

perl -e '$seq="MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIALFQ"; $seq=~s/(.{10})/$1\n/g; print $seq'
MSKNKSPLLN
ESEKMMSEML
PMKVSQSKLN
YEEKVYIPTT
IRNRKQHCFR
RFFPYIALFQ
Run Code Online (Sandbox Code Playgroud)

在朱莉娅,

replace(seq, r"(.{10})" , "\n")
Run Code Online (Sandbox Code Playgroud)

不起作用,因为我不知道如何获取捕获组(.{10})并将其替换为自己+"\n"

julia> replace(seq, r"(.{10})" , "\n")
"\n\n\n\n\n\n"
Run Code Online (Sandbox Code Playgroud)

所以要做到这一点,我需要两个步骤:

    julia> a=matchall(r"(.{1,10})" ,seq)
    6-element Array{SubString{UTF8String},1}:
     "MSKNKSPLLN"
     "ESEKMMSEML"
     "PMKVSQSKLN"
     "YEEKVYIPTT"
     "IRNRKQHCFR"
     "RFFPYIALFQ"

    julia> b=join(a, "\n")
    "MSKNKSPLLN\nESEKMMSEML\nPMKVSQSKLN\nYEEKVYIPTT\nIRNRKQHCFR\nRFFPYIALFQ"

    julia> println(b)
    MSKNKSPLLN
    ESEKMMSEML
    PMKVSQSKLN
    YEEKVYIPTT
    IRNRKQHCFR
    RFFPYIALFQ

# Caution :    
a=matchall(r"(.{10})" ,seq) # wrong if seq is not exactly a multiple of 10 !

julia> seq
"MSKNKSPLLNESEKMMSEMLPMKVSQSKLNYEEKVYIPTTIRNRKQHCFRRFFPYIAL"

julia> matchall(r"(.{10})" ,seq) …
Run Code Online (Sandbox Code Playgroud)

regex replace julia

13
推荐指数
2
解决办法
1112
查看次数

在 GO 中打印表格的有效方法

我想知道一种在GO中打印表格的简单有效的方法。我找到的解决方案有效,但它真的很难看。

许多坦克!

outfile := "file.tsv"
f, err := os.Create(outfile)var buffer bytes.Buffer

            buffer.WriteString(a[i])
            buffer.WriteString("\t")
            buffer.WriteString(a[j])
            buffer.WriteString("\t")
            buffer.WriteString(strconv.FormatFloat(x, 'f', 4, 64))
            buffer.WriteString("\n")
            // // write results to outfile
            f.WriteString(buffer.String())
Run Code Online (Sandbox Code Playgroud)

printing file go

6
推荐指数
2
解决办法
6287
查看次数

Go中复杂关键词典的单一性而不是朱莉娅?

在GO中,当我使用结构作为地图的键时,键是一个单一的.

例如,以下代码生成仅包含一个键的映射:map [{x 1}:1]

package main

import (
    "fmt"
)

type MyT struct {
    A string
    B int
}

func main() {

    dic := make(map[MyT]int)

    for i := 1; i <= 10; i++ {
        dic[MyT{"x", 1}] = 1
    }

    fmt.Println(dic)
}

// result : map[{x 1}:1]
Run Code Online (Sandbox Code Playgroud)

我试图在朱莉娅做同样的事情,我有一个奇怪的惊喜:

这个Julia代码,类似于GO代码,生成一个带有10个键的字典!

    type MyT
        A::String
        B::Int64
    end

    dic = Dict{MyT, Int64}()

    for i in 1:10
        dic[MyT("x", 1)] = 1
    end

    println(dic)
    # Dict(MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1,MyT("x",1)=>1)

    println(keys(dic))
    # MyT[MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1),MyT("x",1)]
Run Code Online (Sandbox Code Playgroud)

那我做错了什么?

谢谢@DanGetz的解决方案!:

immutable MyT     # or struct MyT …
Run Code Online (Sandbox Code Playgroud)

struct dictionary types julia

5
推荐指数
1
解决办法
144
查看次数

Goroutines 共享切片 :: 尝试理解数据竞争

我尝试用 Go 编写一个程序,在非常大的 DNA 序列文件中查找一些基因。我已经编写了一个 Perl 程序来执行此操作,但我想利用 goroutine 并行执行此搜索;)

因为文件很大,所以我的想法是一次读取 100 个序列,然后将分析发送到 goroutine,然后再次读取 100 个序列,依此类推。

我要感谢这个网站的成员对于切片和 goroutine 的非常有用的解释。

我已经进行了建议的更改,以使用 goroutine 处理的切片的副本。但 -race 执行仍然在函数级别检测到一个数据竞争copy()

非常感谢您的评论!

    ==================
WARNING: DATA RACE
Read by goroutine 6:
  runtime.slicecopy()
      /usr/lib/go-1.6/src/runtime/slice.go:113 +0x0
  main.main.func1()
      test_chan006.go:71 +0xd8

Previous write by main goroutine:
  main.main()
      test_chan006.go:63 +0x3b7

Goroutine 6 (running) created at:
  main.main()
      test_chan006.go:73 +0x4c9
==================
[>5HSAA098909 BA098909 ...]
Found 1 data race(s)
exit status 66

    line 71 is : copy(bufCopy, buf_Seq)
    line 63 is : buf_Seq = append(buf_Seq, …
Run Code Online (Sandbox Code Playgroud)

arrays channel go goroutine

3
推荐指数
1
解决办法
3535
查看次数

如何在Julia中使用haskey()和in()函数以及复杂的字典键?

haskey()和in()函数对于测试Julia中的字典内容非常有用:

julia> dict = Dict("a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5)
Dict{String,Int64} with 5 entries:
  "c" => 3
  "e" => 5
  "b" => 2
  "a" => 1
  "d" => 4

julia> haskey(dict, "a")
true

julia> in(("a" => 1), dict)
true
Run Code Online (Sandbox Code Playgroud)

但他对复杂键的行为感到惊讶:

julia> immutable MyT
           A::String
           B::Int64
       end

julia> a = Dict(MyT("Tom",191)=>1,MyT("Bob",20)=>1,MyT("Jo",315)=>1,MyT("Luc",493)=>1)
Dict{MyT,Int64} with 4 entries:
  MyT("Tom",191) => 1
  MyT("Jo",315)  => 1
  MyT("Bob",20)  => 1
  MyT("Luc",493) => 1

julia> keys(a)
Base.KeyIterator for a …
Run Code Online (Sandbox Code Playgroud)

struct dictionary go julia

3
推荐指数
1
解决办法
352
查看次数

如何使用GO建立结构图并将值附加到结构图?

我尝试了许多方法来构建struct映射并向其附加值,但没有找到任何方法。

地图的键是字符串。该结构由两部分组成:“ x”整数和“ y”字符串切片。

我在构建地图时遇到的错误是(对于m): main.go:11: syntax error: unexpected comma, expecting semicolon, newline, or }

当我尝试向地图添加新的键和值时,错误为: go:33: syntax error: missing operand

非常感谢您帮助我发现错误!

package main

import "fmt"

type TEST struct {
    x  int
    y []string  
}

// none of these var gives the expected result

var m = map[string]*struct{x int, y []string}{"foo": {2, {"a", "b"}}, }

var m2 = map[string]struct{x int, y []string}{"foo": {2, {"a", "b"}}, }


var n = map[string]*struct{x int
            y []string
            }{"foo": {2, {"a", "b"}}, }

var o …
Run Code Online (Sandbox Code Playgroud)

struct dictionary go

1
推荐指数
1
解决办法
3257
查看次数

Goroutines共享一个阵列通道:试图解决数据竞争问题

我尝试用并行的goroutine编写一个复杂的程序.这是我的第一个带有通道的程序;)每个goroutine返回一个数组,不幸的是,结果是"随机的".如果我运行10次程序,我有10个不同的结果:(

这是我的程序的过度简化,结果很好(可能因为它太简单了)但是当我用-race参数运行它时,有4个数据竞争.

我试过有一个close()函数,但它没有用.

你可以帮我找错吗?非常感谢你提前!

package main

import "fmt"
import "sync"
import "strconv"


func cat_strings(a int, b string) []string{
    var y []string

    j := strconv.Itoa(a)
    y = append(y, j)
    y = append(y, b)
    return y
}

func main() {
    var slice []string
    var wg sync.WaitGroup
    var x []string

    queue := make(chan []string, 10)

    wg.Add(10)
    for i := 0; i < 10; i++ {
        go func(i int) {
            defer wg.Done()
            x = cat_strings(i, "var")
            queue <- x
        }(i)

    }
    //close(queue)

    go func() …
Run Code Online (Sandbox Code Playgroud)

arrays parallel-processing channel go

0
推荐指数
1
解决办法
600
查看次数