【问题标题】:Finding variables that share common properties查找具有共同属性的变量
【发布时间】:2011-07-20 04:45:11
【问题描述】:

我正在使用 Mathematica 并有一组变量 (A,B,C,D,...),属性 A=(blue, big, rounded), B=(red, small, spiky) 和等等。这些属性在变量之间可以是通用的。找到所有具有共同属性(例如,很小)的变量的最佳、通用方法是什么?谢谢。

【问题讨论】:

  • 请允许我欢迎您来到 StackOverflow,并提醒我们通常在这里做的三件事:1) 当您获得帮助时,请尝试在您的专业领域中回答问题 2)Read the FAQs 3)当你看到好的问答时,给他们投票using the gray triangles,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得接受更好地解决您的问题的答案,如果有的话,by pressing the checkmark sign

标签: variables properties wolfram-mathematica


【解决方案1】:

以下是可能的属性列表:

In[1]:= properties={"red","green","blue","big","small","rounded","spiky"};

这里是具有这些属性的对象列表

In[2]:= list={{"blue","big","rounded"},{"red","small","spiky"},
              {"red","big","rounded"},{"blue","small","spiky"}};

您可以使用Select找到所有具有“蓝色”属性的对象

In[3]:= Select[list, MemberQ[#,"blue"]&]
Out[3]= {{blue,big,rounded},{blue,small,spiky}}

这可以包装成一个函数。虽然我将如何编写该函数将取决于您计划的数据结构和用法。


实际上,我只是重读了您的问题,您有一个具有某些属性的对象列表,并且您想按名称引用这些对象。所以你可能想要更像

In[1]:= listProperties["A"]:={"blue","big","rounded"}
        listProperties["B"]:={"red","small","spiky"}
        listProperties["C"]:={"red","big","rounded"}
        listProperties["D"]:={"blue","small","spiky"}

上面我定义了一些与某些字符串相关的属性。您不必在上面或下面使用字符串,如果需要,您可以创建比这更好的结构。您还可以创建一个构造函数来创建上述内容,这样的构造函数还可以检查提供的属性列表是否具有正确的形式 - 即没有矛盾的属性,都在已知属性列表中等等......

然后我们定义一个函数来测试一个对象/字符串是否具有与之关联的特定属性

In[2]:= hasProperty[obj_, property_]:=MemberQ[listProperties[obj],property]

如果listProperties[obj] 没有与之关联的定义/规则,您可能希望返回错误或警告消息。

使用Select 查找列表中具有关联属性“blue”的所有“对象”:

In[3]:= Select[{"A","B","C","D"}, hasProperty[#,"blue"]&]
Out[3]= {A,D}

还有其他方法(可能是更好的方法)来设置这样的数据结构。但这是 Mathematica 中最简单的方法之一。

【讨论】:

  • 非常感谢 Simon,这正是我所需要的。很抱歉不能竖起大拇指。
  • @Simon 我正在考虑使用Options 来设置独立于变量值的属性。不确定这是否是 OP 想要的。
  • 一切都在那里,@belisarius。只是想为内置的数学数据添加一些属性并包含新数据以对其进行分类。发送。
  • @belisarius:使用Options 很快就会变得一团糟。上次我试图用它们做一些简单的选择以外的事情 (here) 我很快就幻灭了。当/如果我重写和扩展该矩阵代码时,我将只使用可选参数。不是Options
  • @Simon 看了你的代码后,我想我不会那样尝试...... :)
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多