首先,如果之前有人问过,请道歉。我很难找到先前被问过的问题,所以在这里:
我有计算来自.csv的传入数据的公式。问题是公式只计算原始csv及其行数的长度。 csv的进入行数差别很大。有没有一种简单的方法来解决这个问题?
谢谢, Ĵ
答案 0 :(得分:1)
您可以使用INDEX / MATCH:
import numpy as np
cimport numpy as np
cimport cython
from cython.view cimport array as cvarray
from libc.stdlib cimport malloc, free
from libc.math cimport log, exp
from cython_gsl cimport *
import ctypes
from libc.string cimport memset
cdef extern from "stdlib.h":
long rand()
void srand(int seed)
cdef extern from "time.h":
ctypedef long time_t
time_t time(time_t*)
cdef gsl_rng *r = gsl_rng_alloc(gsl_rng_mt19937)
srand(time(NULL))
@cython.cdivision(True)
@cython.boundscheck(False)
@cython.wraparound(False)
cdef void initPar( double* alpha, int* K, int* N, gsl_matrix* mu, gsl_matrix *Z ):
cdef:
int i, j
int seed = rand()
#generate random seed
gsl_rng_set(r, seed)
cdef double prev_mu
for i from 0 <= i < K[0]:
if i >= 1:
prev_mu *= gsl_ran_beta(r, alpha[0], 1)
else:
prev_mu = gsl_ran_beta(r, alpha[0], 1)
gsl_matrix_set(mu, i, 0, prev_mu)
cdef double mi
for i from 0 <= i < K[0]:
mi= gsl_matrix_get(mu, i, 0)
for j from 0 <= j < N[0]:
gsl_matrix_set(Z, j, i, gsl_ran_bernoulli(r, mi) )
return
def func(np.ndarray[ndim=2, dtype=np.float64_t] inputs, int LFeatures = 5, double alpha):
cdef:
int *K_init= &LFeatures
int N = inputs.shape[0]
int D = inputs.shape[1]
gsl_matrix *mu = gsl_matrix_alloc(K_init[0], 1)
gsl_matrix *Z = gsl_matrix_alloc(N, K_init[0])
int i, j
gsl_matrix *X = gsl_matrix_alloc(N, D)
for i from 0 <= i < N:
for j from 0 <= j < D:
gsl_matrix_set(X, i, j, inputs[i,j])
gsl_matrix_set_zero(mu)
gsl_matrix_set_zero(Z)
initPar(&alpha, K_init, &N, mu, Z )
这将把从B2开始的所有单元格汇总到最后一个单元格中的数字。
=SUM(B2:INDEX(B:B,MATCH(1E+99,B:B,0)))
这将连接从B2到最后一个单元格中包含文本的所有单元格。
要查找最后一个单元格,无论是数字还是文本:
=CONCAT(B2:INDEX(B:B,MATCH("zzz",B:B,0)))
一个注意事项,大多数标准公式对完整列引用没有任何损害,如COUNTIF(S),SUMIF(S),...
数组公式和类似公式的数组(SUMPRODUCT,AGGREGATE)需要限制对数据集的引用,并且使用上述方法将允许动态使用数据集。
编辑:
你的频率公式:
INDEX(B:B,MAX(IFERROR(MATCH("zzz",B:B,0),0),IFERROR(MATCH(1E+99,B:B,0),0)))
答案 1 :(得分:0)
您可以将所有公式更改为&#34; D:D&#34;为了计算整行。例如:&#34; = countif(D:D,&#34; *&#34;)&#34;将计算D列中的所有内容,您也可以使用类似的函数进行其他数学运算。
您还可以使用VBA动态计算行数,然后在公式中使用该数字,但这是一个完整的其他主题/对话/问题。