vec = randi(10,10,1)
vec(vec < 5) = 0
func = @(x) x(x < 5) = 0 % This isn't valid
Run Code Online (Sandbox Code Playgroud)
我该如何将第二行代码转换为可以与之结合使用的函数句柄cellfun?
matlab anonymous-function function-handle cell-array elementwise-operations
我有一个看起来像这样的CSV(当带入一个pandas Dataframe时
read_csv(),它看起来一样).
我想根据以下逻辑更新列ad_requests中的值:
对于给定的行,如果ad_requests具有值,请不管它.否则,把它的值上一行对价值AD_REQUESTS减去前行的价值为印象.所以在第一个例子中,我们希望最终得到:
我部分到了那里:
df["ad_requests"] = [i if not pd.isnull(i) else ??? for i in df["ad_requests"]]
Run Code Online (Sandbox Code Playgroud)
这就是我陷入困境的地方.之后else,我想"回去"并访问前一个"行",但我知道这不是大熊猫的意思.另外需要注意的是,行总是按行ad_tag_name分组为三个.如果我pd.groupby["ad_tag_name"],我可以把它变成一个list并开始切片和索引,但同样,我认为必须有更好的方法在熊猫中做到这一点(因为有很多东西).
Python:2.7.10
熊猫:0.18.0
numpy.divide和Python斜杠/运算符之间有什么相同点和不同点?据我所知,他们的行为相同,都实现了元素划分.该numpy的文件中提到:
numpy.divide(x1,x2)......就阵列广播而言,相当于x1/x2....
暗示np.divide(x1,x2)并不完全等同于x1/x2.我运行了以下代码片段来比较它们的速度:
import numpy as np
import time
a = np.random.rand(10000, 10000)
b = np.random.rand(10000, 10000)
tic = time.time()
c = a / b
toc = time.time()
print("Python divide took: ", toc - tic)
tic = time.time()
c = np.divide(a, b)
toc = time.time()
print("Numpy divide took: ", toc - tic)
Run Code Online (Sandbox Code Playgroud)
似乎Python鸿沟通常运行得更快,这使我相信Numpy鸿沟实现了一些额外的花里胡哨.
任何帮助深表感谢!
我想要一个f这样的功能
(outer(X, Y, f))[i, j]是X的第i个元素和Y的第j个元素的并排连接,类似于c(X[i], Y[j])或具有类似的结构.
此外,我希望这个结果能够重复这个过程,并且通过这种方式,我们得到了这个结果
(outer(outer(X, Y, f), Z, f))[i, j, k]是X的第i个元素,Y的第j个元素和Z的第k个元素的并排串联,即相等或具有类似于的结构c(X[i], Y[j], Z[k]).
最终我的目标是定义这样的函数:
foo <- function(a.list) {
Reduce(function(x, y) outer(x, y, f), a.list)
}
Run Code Online (Sandbox Code Playgroud)
这样,如果
A <- foo(list(v_1, ..., v_p))
Run Code Online (Sandbox Code Playgroud)
那dim(A)将是c(length(v_1), ..., length(v_p)),和
A[i_1, ..., i_p] == c(v_1[i_1], ..., v_p[i_p])
Run Code Online (Sandbox Code Playgroud)
对于所有有效的索引集(i_1,...,i_p).
例如:
> foo(list(LETTERS[1:2], c(3, 4, 5), letters[6:7]))
, , 1
[,1] [,2] [,3]
[1,] c("A", 3, "f") c("A", 4, "f") c("A", 5, "f") …Run Code Online (Sandbox Code Playgroud) 想要在1D和2D阵列之间执行元素明智的比较.需要将1D阵列的每个元素与相应的2D行进行比较(例如,更大),并且将创建掩模.这是一个例子:
A = np.random.choice(np.arange(0, 10), (4,100)).astype(np.float)
B = np.array([5., 4., 8., 2. ])
Run Code Online (Sandbox Code Playgroud)
我想要做
A<B
Run Code Online (Sandbox Code Playgroud)
这样A的第一行将与B [0]进行比较,后者为5.结果将是一个布尔数组.
如果我试试这个我得到:
operands could not be broadcast together with shapes (4,100) (4,)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
玩具示例
我有两个具有不同形状的数组,例如:
import numpy as np
matrix = np.arange(5*6*7*8).reshape(5, 6, 7, 8)
vector = np.arange(1, 20, 2)
Run Code Online (Sandbox Code Playgroud)
我想要做的是将矩阵的每个元素乘以“向量”的元素之一,然后在最后两个轴上求和。为此,我有一个与“矩阵”形状相同的数组,它告诉我要使用哪个索引,例如:
Idx = (matrix+np.random.randint(0, vector.size, size=matrix.shape))%vector.size
Run Code Online (Sandbox Code Playgroud)
我知道解决方案之一是:
matVec = vector[Idx]
res = np.sum(matrix*matVec, axis=(2, 3))
Run Code Online (Sandbox Code Playgroud)
甚至:
res = np.einsum('ijkl, ijkl -> ij', matrix, matVec)
Run Code Online (Sandbox Code Playgroud)
问题
然而,我的问题是我的数组很大,并且 matVec 的构建既需要时间又需要内存。那么有没有办法绕过这个并仍然达到相同的结果呢?
更现实的例子
这是我实际做的一个更现实的例子:
import numpy as np
order = 20
dim = 23
listOrder = np.arange(-order, order+1, 1)
N, P = np.meshgrid(listOrder, listOrder)
K = np.arange(-2*dim+1, 2*dim+1, 1)
X = np.arange(-2*dim, 2*dim, 1)
tN = np.einsum('..., …Run Code Online (Sandbox Code Playgroud) python arrays numpy matrix-multiplication elementwise-operations
我目前正在优化我的部分代码,因此执行一些基准测试.
我有NxN-matrices A和T和想要的elementwise它们相乘并将结果保存在A再次,即A = A*T.由于此代码不可并行化,我将分配扩展为
!$OMP PARALLEL DO
do j = 1, N
do i = 1, N
A(i,j) = T(i,j) * A(i,j)
end do
end do
!$OMP END PARALLEL DO
Run Code Online (Sandbox Code Playgroud)
(http://pastebin.com/RGpwp2KZ上的完整最小工作示例.)
现在发生的奇怪事情是,无论线程数量(1到4之间),执行时间大致保持不变(+ - 10%),而CPU时间随着线程数量的增加而增加.这让我觉得所有的线程都做同样的工作(因为我在OpenMP上犯了一个错误)因此需要相同的时间.
但是在另一台计算机上(有96个CPU内核可用),程序的行为与预期一致:随着线程数的增加,执行时间减少.令人惊讶的是,CPU时间也减少了(最多约10个线程,然后再次上升).
可能是有不同版本OpenMP或gfortran已安装.如果这可能是原因,那么如果你能告诉我如何找到它就会很棒.
我有一个看起来像这样的数据框,它有三列(10 个不同的刺激、16 个试验和一个包含等长列表的数据列)。我只想根据刺激获得数据列的元素均值。由于我有 10 个不同的刺激,它应该为每个刺激产生 10 个数组,这也是试验中所有数据数组的平均值。
我想过这样的事情,但它给了我一些非常奇怪的东西。
df.groupby('stimulus').apply(np.mean)
>> IndexError: tuple index out of range
Run Code Online (Sandbox Code Playgroud)
trial_vec = np.tile(np.arange(16)+1, 10)
stimulus_vec = np.repeat([-2., -1.75, -1., -0.75, -0.5, 0.5, 1., 1.25, 1.75, 2.5 ], 16)
data_vec = np.random.randint(0, 16, size=160)
df = pd.DataFrame({'trial': trial_vec, 'stimulus': stimulus_vec, 'data': data_vec}).astype('object')
df["data"] = [np.random.rand(4).tolist() for i in range(160)]
df
Run Code Online (Sandbox Code Playgroud) 我是 Julia 的新手,这似乎是一个直接的操作,但出于某种原因,我在任何地方都找不到答案。
我一直在网上浏览一些教程,他们只是使用 exp(A) ,其中 A 是 nxm 矩阵,但这给了我一个 DimensionMismatch 错误。
我想向字典的所有值广播一个操作。对于数组,我知道我可以使用以下方法广播元素操作:
julia> b1 = [1, 2, 3]
julia> b1./2
3-element Array{Float64,1}:
0.5
1.0
1.5
Run Code Online (Sandbox Code Playgroud)
将相同操作广播到字典的所有值的有效方法是什么?说,为了字典
a1 = Dict("A"=>1, "B"=>2)
Run Code Online (Sandbox Code Playgroud)