我正在使用 Matlab。
我有一个二元方阵。对于每一行,有一个或多个 1 的条目。我想遍历此矩阵的每一行并返回这些 1 的索引并将它们存储在单元格的条目中。
我想知道是否有一种方法可以在不循环此矩阵的所有行的情况下执行此操作,因为在 Matlab 中 for 循环非常慢。
例如,我的矩阵
M = 0 1 0
1 0 1
1 1 1
Run Code Online (Sandbox Code Playgroud)
然后最终,我想要类似的东西
A = [2]
[1,3]
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
A
细胞也是如此。
有没有办法在不使用 for 循环的情况下实现这个目标,目的是更快地计算结果?
这是一个关于我们是否可以在matlab中使用矢量化操作类型以避免写入循环的问题.
我有一个矢量
Q = [0.1,0.3,0.6,1.0]
Run Code Online (Sandbox Code Playgroud)
我生成一个均匀分布的随机向量 [0,1)
X = [0.11,0.72,0.32,0.94]
Run Code Online (Sandbox Code Playgroud)
我想知道的每个条目是否X
是之间[0,0.1)
或[0.1,0.3)
或[0.3,0.6)
或[0.6,1.0)
我想返回包含最大元素的索引向量Q
那的每个条目X
少于.
我可以写一个for循环
Y = zeros(length(X),1)
for i = 1:1:length(X)
Y(i) = find(X(i)<Q, 1);
end
Run Code Online (Sandbox Code Playgroud)
此示例的预期结果:
Y = [2,4,3,4]
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有办法避免写循环?(我看到我的问题有很多非常好的答案.非常感谢你!如果我们更进一步,如果我的Q是一个矩阵,那么我想检查是否)
Y = zeros(length(X),1)
for i = 1:1:length(X)
Y(i) = find(X(i)<Q(i), 1);
end
Run Code Online (Sandbox Code Playgroud) 我是 Python 的初学者。我曾经密集地使用matlab。现在我正在转向python。我有一个关于数组维数的问题。
我导入 Numpy
我首先创建一个数组 X,然后我使用一些嵌入的函数,比如 sum,来处理我的数组。最终,当我尝试检查数组 X 的维数时,它变成了:X.shape,outputs (81,)。数字 81 是我所期望的,但我也期望第 2 维是 1,而不仅仅是省略。这让我感到很不舒服,即使我直接输入X,它也输出正确,即一列和X中的数字都符合预期。
然后,当我使用另一个数组 Y 时,它实际上具有 Y.shape,输出 (81,1),然后如果我键入 X*Y,我希望看到一个维度数组 (81,1) 但相反,我看到了一个维数数组 (81,81)。
我不知道产生这个结果的潜在机制是什么。
我解决这个问题的方法很愚蠢。我首先创建一个新数组 C = zeros((81,1)),所以 C 字面上有维度 (81,1),然后我通过键入 C[:,0]=X 将我的 X 分配给 C,然后是 C.shape = (81,1)。请注意,如果我输入 C=X,则 C.shape=(81,),这又回到了我的问题。所以我可以解决我的问题,但我确信有更好的方法来解决我的问题,我也不明白为什么 python 会产生像 (81,) 这样的东西,省略了第二维。
我对python pandas中的类型转换感到困惑
df = pd.DataFrame({'a':['1.23', '0.123']})
type(df['a'])
df['a'].astype(float)
Run Code Online (Sandbox Code Playgroud)
这df
是一个熊猫系列,其内容是2个字符串,然后我可以应用于astype(float)
这个熊猫系列,它正确地将所有字符串转换为浮点数.然而
df['a'][1].astype(float)
Run Code Online (Sandbox Code Playgroud)
给我AttributeError:'str'对象没有属性'astype'.我的问题是:怎么会这样?我可以将整个系列从字符串转换为浮点数,但我无法将此系列的条目从字符串转换为浮点数?
另外,我加载了我的原始数据集
df['id'].astype(int)
Run Code Online (Sandbox Code Playgroud)
它生成了ValueError:int()的无效文字,基数为10:''这个似乎表明我的内容中有空白df['id']
.所以我通过打字来检查是否属实
'' in df['id']
Run Code Online (Sandbox Code Playgroud)
它说错了.所以我很困惑.
我正在使用pyspark
. 我有一个整数的火花数据框my_sdf
,col1
我预定义了一个整数列表
S1 = [1,2,3,4]
Run Code Online (Sandbox Code Playgroud)
然后我想返回set 中my_sdf
where 中的行。所以我做了以下事情:col1
S1
Test1 = my_sdf.filter(my_sdf.col1 in S1).cache()
# or Test1 = my_sdf.filter(my_sdf.col1 not in S1).cache()
Test1.count()
Run Code Online (Sandbox Code Playgroud)
但它返回
ValueError: 无法将列转换为 bool: 请使用 '&' 表示 'and', '|' 在构建 DataFrame 布尔表达式时,为“or”,“~”为“not”。
我不知道如何解决这个问题。最终,我想开始S1 = []
成为一个空列表作为我迭代和循环期间的起点,我将更新S1
. 同样,not in S1
也不起作用。我试着写
Test1 = my_sdf.filter((my_sdf.col1 <10) & (my_sdf.col1>2)).cache()
Run Code Online (Sandbox Code Playgroud)
它有效,但如果我使用过滤条件in S1
,则它不起作用。
另一个问题是:这个cache()
东西在做什么?如果我不放那会有什么不同吗?有人告诉我 spark 是lazy
用来评估代码的,所以在我调用之前Test.count()
,它实际上并没有执行之前的过滤命令。但我不确定这有多准确cache()
。