我偶然发现了将DOM NodeList转换为常规数组的简洁快捷方式,但我必须承认,我并不完全理解它是如何工作的:
[].slice.call(document.querySelectorAll('a'), 0)
Run Code Online (Sandbox Code Playgroud)
所以它从一个空数组开始[],然后slice用于将结果转换call为一个新数组是啊?
我不明白的是call.如何document.querySelectorAll('a')从NodeList转换为常规数组?
要声明具有非固定大小的空切片,最好是:
mySlice1 := make([]int, 0)
Run Code Online (Sandbox Code Playgroud)
要么:
mySlice2 := []int{}
Run Code Online (Sandbox Code Playgroud)
只是想知道哪一个是正确的方法.
我正在寻找一种返回数组片段的Java方法.一个例子是获取包含字节数组的第4和第5个字节的字节数组.我不想在堆内存中创建一个新的字节数组来做到这一点.现在我有以下代码:
doSomethingWithTwoBytes(byte[] twoByteArray);
void someMethod(byte[] bigArray)
{
byte[] x = {bigArray[4], bigArray[5]};
doSomethingWithTwoBytes(x);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以做到doSomething(bigArray.getSubArray(4, 2))4是偏移量,2是长度,例如.
查看bash(1)手册页中的"Array"部分,我没有找到切片数组的方法.
所以我想出了这个过于复杂的功能:
#!/bin/bash
# @brief: slice a bash array
# @arg1: output-name
# @arg2: input-name
# @args: seq args
# ----------------------------------------------
function slice() {
local output=$1
local input=$2
shift 2
local indexes=$(seq $*)
local -i i
local tmp=$(for i in $indexes
do echo "$(eval echo \"\${$input[$i]}\")"
done)
local IFS=$'\n'
eval $output="( \$tmp )"
}
Run Code Online (Sandbox Code Playgroud)
像这样使用:
$ A=( foo bar "a b c" 42 )
$ slice B A 1 2
$ echo "${B[0]}" # bar
$ echo "${B[1]}" # a …Run Code Online (Sandbox Code Playgroud) 这个Python代码:
import numpy as p
def firstfunction():
UnFilteredDuringExSummaryOfMeansArray = []
MeanOutputHeader=['TestID','ConditionName','FilterType','RRMean','HRMean',
'dZdtMaxVoltageMean','BZMean','ZXMean','LVETMean','Z0Mean',
'StrokeVolumeMean','CardiacOutputMean','VelocityIndexMean']
dataMatrix = BeatByBeatMatrixOfMatrices[column]
roughTrimmedMatrix = p.array(dataMatrix[1:,1:17])
trimmedMatrix = p.array(roughTrimmedMatrix,dtype=p.float64) #ERROR THROWN HERE
myMeans = p.mean(trimmedMatrix,axis=0,dtype=p.float64)
conditionMeansArray = [TestID,testCondition,'UnfilteredBefore',myMeans[3], myMeans[4],
myMeans[6], myMeans[9], myMeans[10], myMeans[11], myMeans[12],
myMeans[13], myMeans[14], myMeans[15]]
UnFilteredDuringExSummaryOfMeansArray.append(conditionMeansArray)
secondfunction(UnFilteredDuringExSummaryOfMeansArray)
return
def secondfunction(UnFilteredDuringExSummaryOfMeansArray):
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
return
firstfunction()
Run Code Online (Sandbox Code Playgroud)
抛出此错误消息:
File "mypath\mypythonscript.py", line 3484, in secondfunction
RRDuringArray = p.array(UnFilteredDuringExSummaryOfMeansArray,dtype=p.float64)[1:,3]
ValueError: setting an array element with a sequence.
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我如何解决上面破坏的代码中的问题,以便它停止抛出错误消息?
编辑: 我做了一个打印命令来获取矩阵的内容,这是打印出来的:
UnFilteredDuringExSummaryOfMeansArray是:
[['TestID', 'ConditionName', 'FilterType', 'RRMean', 'HRMean', 'dZdtMaxVoltageMean', 'BZMean', 'ZXMean', …Run Code Online (Sandbox Code Playgroud) 我想切片NumPy nxn数组.我想提取该数组的m行和列的任意选择(即行数/列数没有任何模式),使其成为一个新的mxm数组.对于这个例子,让我们说数组是4x4,我想从中提取一个2x2数组.
这是我们的数组:
from numpy import *
x = range(16)
x = reshape(x,(4,4))
print x
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
Run Code Online (Sandbox Code Playgroud)
要删除的行和列是相同的.最简单的情况是当我想要提取一个位于开头或结尾的2x2子矩阵时,即:
In [33]: x[0:2,0:2]
Out[33]:
array([[0, 1],
[4, 5]])
In [34]: x[2:,2:]
Out[34]:
array([[10, 11],
[14, 15]])
Run Code Online (Sandbox Code Playgroud)
但是,如果我需要删除另一行/列的混合物怎么办?如果我需要删除第一行和第三行/行,从而提取子矩阵[[5,7],[13,15]]怎么办?行/行可以有任何组合.我读到某个地方,我只需要使用行和列的索引数组/列表索引我的数组,但这似乎不起作用:
In [35]: x[[1,3],[1,3]]
Out[35]: array([ 5, 15])
Run Code Online (Sandbox Code Playgroud)
我发现了一种方法,即:
In [61]: x[[1,3]][:,[1,3]]
Out[61]:
array([[ 5, 7],
[13, 15]])
Run Code Online (Sandbox Code Playgroud)
第一个问题是它几乎不可读,尽管我可以忍受它.如果有人有更好的解决方案,我当然希望听到它.
另一件事是我在一个论坛上读到,使用数组索引数组强制NumPy制作所需数组的副本,因此当处理大型数组时,这可能会成为一个问题.为什么这样/这个机制如何运作?
什么是__CODE__用于提取的最后一个元素的方式__CODE__?
var slice []int
slice = append(slice, 2)
slice = append(slice, 7)
slice[len(slice)-1:][0] // Retrieves the last element
Run Code Online (Sandbox Code Playgroud)
上面的解决方案有效,但似乎很尴尬.
这出现在 Python的隐藏功能中,但我看不到可以解释该功能如何工作的好文档或示例.
在Go中清除切片的适当方法是什么?
以下是我在go论坛中发现的内容:
// test.go
package main
import (
"fmt"
)
func main() {
letters := []string{"a", "b", "c", "d"}
fmt.Println(cap(letters))
fmt.Println(len(letters))
// clear the slice
letters = letters[:0]
fmt.Println(cap(letters))
fmt.Println(len(letters))
}
Run Code Online (Sandbox Code Playgroud)
它是否正确?
为了澄清,缓冲区被清除,因此可以重复使用.
一个例子是bytes包中的Buffer.Truncate函数.
请注意,Reset只调用Truncate(0).所以看来在这种情况下,第70行会评估:b.buf = b.buf [0:0]
http://golang.org/src/pkg/bytes/buffer.go
// Truncate discards all but the first n unread bytes from the buffer.
60 // It panics if n is negative or greater than the length of the buffer.
61 func (b *Buffer) Truncate(n int) {
62 …Run Code Online (Sandbox Code Playgroud)